好吧也许不是那么令人费解,但现在就是。
我正在乱搞并注意到这一点,只在文件中键入<?php
,就在那之后,没有空格,只有标签,抛出一个解析错误。
使用单个空间可以正常工作。我想知道是否有人知道为什么解析器会窒息,因为除非省略结束标记,否则完全没问题。 感谢。
答案 0 :(得分:6)
在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
开始序列。