好吧,也许不是那么令人费解,但就是这样。
我在乱七八糟地注意到这一点,只<?php
在一个文件中输入,只是那个,之后没有空格,没有别的只是标签,会引发解析错误。
使用单个空格可以正常工作。我想知道是否有人知道为什么解析器会阻塞,因为省略结束标签是完全可以的。谢谢。
好吧,也许不是那么令人费解,但就是这样。
我在乱七八糟地注意到这一点,只<?php
在一个文件中输入,只是那个,之后没有空格,没有别的只是标签,会引发解析错误。
使用单个空格可以正常工作。我想知道是否有人知道为什么解析器会阻塞,因为省略结束标签是完全可以的。谢谢。
PHP文档说:
在 PHP 5.2 和更早的版本中,解析器不允许
<?php
开始标记是文件中的唯一内容。自 PHP 5.3 起允许这样做。
话虽如此,在 PHP 5.3 中,如果您在文件中short_open_tags
设置为,错误仍然会出现。On
php.ini
这在基本语法的 PHP 文档中得到了回答:
在 PHP 5.2 和更早的版本中,解析器不允许
<?php
开始标记是文件中的唯一内容。自 PHP 5.3 起允许这样做。
但是,OP似乎允许开始标签+空格(即不是文件中唯一的东西)。此外,从评论来看,发行版或其他补丁的情况似乎并非如此。
我的 PHP 版本:
$ php -v
PHP 5.3.6 (cli) (built: Mar 17 2011 20:56:13)
Copyright (c) 1997-2011 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2011 Zend Technologies
with Xdebug v2.1.0, Copyright (c) 2002-2010, by Derick Rethans
有问题的代码:
$ echo -n "<?php" | php
<?php
在旁边添加更多内容<?php
:
$ echo -n "<?php/**/" | php
<?php/**/
或者
$ echo -n "<?php;" | php
<?php;
然后是一个空格:
$ echo -n "<?php " | php
(最后清空输出)。
该 PHP 版本没有为我Parse error: syntax error, unexpected $end
提供上述示例的消息类型,但确实如此:
$ echo -n "<?php x" | php -d display_errors=1
Parse error: syntax error, unexpected $end in - on line 1
希望能帮助到你。在我看来,这看起来就像输入被视为文本,直到空格跟随<?php
打开序列。