比较老的 PHP 程序,常常使用简短风格,为了使这种代码可以被解释,必须开启 short_open_tag选项; 如果不改则会出现如下错误:

Warning: Unexpected character in input: ‘\’ (ASCII=92) state=1 in /home/http/…/index.php on line 485
Warning: Unexpected character in input: ‘\’ (ASCII=92) state=1 in /home/http/…/index.php on line 485
Parse error: syntax error, unexpected T_STRING in /home/http/…/index.php on line 485

个人不喜欢把 short_open_tag 改成 On ,分析一下只要把代码中的 <? 改成 <?php <?= 改成 <?php echo 。 一行Shell把它替换一下就OK:


user@~$ sed -i ‘s/<?[[:space:]]/<?php /g;s/<?$/<?php /g;s/<?=/<?php echo /g’ `find PATH/ -name “*.php” |xargs`
# 把 PATH 改成代码目录即可。


参考 php.ini 核心配置选项说明
http://www.php.net/manual/zh/ini.core.php#ini.short-open-tag

决定是否允许使用 PHP 代码开始标志的缩写形式( <? ?> )。如果要和 XML 结合使用 PHP,可以禁用此选项以便于嵌入使用 <?xml ?> 。否则还可以通过 PHP 来输出,例如:<?php echo ‘<?xml version=”1.0″‘; ?> 。如果禁用了,必须使用 PHP 代码开始标志的完整形式( <?php ?> )。

Note: 本指令也会影响到缩写形式 <?= ,它和 <? echo 等价。使用此缩写需要 short_open_tag 的值为 On。