繁体   English   中英

令人费解的 php 解析器错误

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM