令人费解的php解析器错误

时间:2011-07-17 22:14:18

标签: php parsing php-internals

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

我正在乱搞并注意到这一点,只在文件中键入<?php,就在那之后,没有空格,只有标签,抛出一个解析错误。

使用单个空间可以正常工作。我想知道是否有人知道为什么解析器会窒息,因为除非省略结束标记,否则完全没问题。 感谢。

3 个答案:

答案 0 :(得分:6)

PHP documentation说:

  

在PHP 5.2及更早版本中,解析器不允许<?php开放   标记是文件中唯一的东西。从PHP 5.3起允许这样做。

话虽如此,在PHP 5.3中,如果short_open_tags文件中On设置为php.ini,则错误仍会显示。

答案 1 :(得分:2)

PHP Documentation for Basic Syntax

中回答了这个问题
  

在PHP 5.2及更早版本中,解析器不允许<?php开放   标记是文件中唯一的东西。从PHP 5.3起允许这样做。

然而,通过OP似乎允许开始标记+空格(即不是文件中唯一的东西)。另外,从评论来看,似乎情况不是发行版本或其他的修补

答案 2 :(得分: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开始序列。