[英]puzzling php parser error
好吧,也许不是那么令人费解,但就是这样。
我在搞乱并注意到这一点,在文件中只键入<?php
,就这样,之后没有空格,没有别的只是标签,会引发解析错误。
使用单个空格可以正常工作。 我想知道是否有人知道为什么解析器会阻塞,因为省略结束标签是完全可以的。 谢谢。
PHP 文档说:
在 PHP 5.2 及更早版本中,解析器不允许
<?php
开始标记成为文件中的唯一内容。 从 PHP 5.3 开始允许这样做。
话虽如此,在 PHP 5.3 中,如果您在php.ini
文件中将short_open_tags
设置为On
,错误仍然会出现。
这在基本语法的 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
开头序列。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.