8

好吧,也许不是那么令人费解,但就是这样。

我在乱七八糟地注意到这一点,只<?php在一个文件中输入,只是那个,之后没有空格,没有别的只是标签,会引发解析错误。

使用单个空格可以正常工作。我想知道是否有人知道为什么解析器会阻塞,因为省略结束标签是完全可以的。谢谢。

4

3 回答 3

6

PHP文档说:

在 PHP 5.2 和更早的版本中,解析器不允许<?php开始标记是文件中的唯一内容。自 PHP 5.3 起允许这样做。

话虽如此,在 PHP 5.3 中,如果您在文件中short_open_tags设置为,错误仍然会出现。Onphp.ini

于 2011-07-17T22:29:21.647 回答
2

这在基本语法的 PHP 文档中得到了回答:

在 PHP 5.2 和更早的版本中,解析器不允许<?php开始标记是文件中的唯一内容。自 PHP 5.3 起允许这样做。

但是,OP似乎允许开始标签+空格(即不是文件中唯一的东西)。此外,从评论来看,发行版或其他补丁的情况似乎并非如此。

于 2011-07-17T22:26:44.323 回答
1

我的 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打开序列。

于 2011-07-17T22:49:12.557 回答