新装的Lanstar主题部署后报错,找不着作者只能自己改
PHP还没学过,只能按百度一点点改了
正文
No 1:
Error:
Parse error: syntax error, unexpected '' (T_ENCAPSED_AND_WHITESPACE), expecting identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING) in /www/wwwroot/blog/usr/themes/lanstar-master/libs/utils.php on line 482
Code:
$post_title = htmlspecialchars($val['title']);
原因查找:
在https://blog.csdn.net/a10201516595/article/details/103358668/找到可能原因:
当变量$外有引号包着的时候,里面的索引不能再加引号!!
可是该行变量$并没有引号包着,先尝试去掉看情况。
去掉后测试不报错。
猜测:可能在代码上文中有缺少的非成对引号存在,待会再找
No 2:
Error:
Parse error: syntax error, unexpected end of file in /www/wwwroot/blog/usr/themes/lanstar-master/libs/utils.php on line 499
Code:
- 文件最后一行空行报错
}
原因查找:
可能性1:Windows文件系统回车符和Unix不同(已排除)。
可能性2:使用代码高亮工具检查,发现在`$content = <<<EOF`后就没有高亮显示了,可能是这行引起的(已确认)。
可能性2:
- 在
$content = <<<EOF
后就没有高亮显示
foreach ($getIconRow as $key => $value) {
$iconInfo = explode('+', $value);
$content = <<<EOF
<a href="$iconInfo[2]" title="$iconInfo[0]">
<svg class="icon" aria-hidden="true">
<use xlink:href="#$iconInfo[1]"></use>
</svg>
</a>
EOF;
$text .= $content;
}
- 经过查询得知EOF为PHP界定符,需要如下配套使用:
<<<EOF
...
EOF;
- 且在结束符
EOF;
前不得有缩进和空格。回看文件,在EOF;
前有多个缩进,去除后成功解决问题
结论及修改方法
结论
- BUG由EOF界定符引起,EOF界定符在PHP中起的作用应该起到“跨行双引号”的作用,因为缩进没有识别到结束符
EOF;
,系统判断下面整段代码都在“引号”内,所以会出现No.1的报错,但实际和引号无关。
修改方法
- 找到文件中的
EOF;
,把前面的空格和缩进去掉。
记录
- 2022-04-05,迁移自旧博客 - hapke