令人费解的 php 解析器错误

发布于 2024-11-25 06:44:01 字数 181 浏览 2 评论 0原文

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

我在闲逛时注意到了这一点,在文件中仅输入 ,之后没有空格,只有标签,没有其他任何内容,会引发解析错误。

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

Ok maybe not so puzzling, but here it is.

I was messing around and noticed this, typing just <?php in a file, just that, no space after that, nothing else just the tag, throws a parse error.

With a single space it works fine. I was wondering if anyone knows why the parser chokes, since it is perfectly okay otherwise to omit the closing tag.
Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

溺孤伤于心 2024-12-02 06:44:01

PHP 文档 说:

在 PHP 5.2 及更早版本中,解析器不允许 打开
标签是文件中唯一的东西。从 PHP 5.3 开始这是允许的。


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

The PHP documentation says:

In PHP 5.2 and earlier, the parser does not allow the <?php opening
tag to be the only thing in a file. This is allowed as of PHP 5.3.

With that said, in PHP 5.3, if you have short_open_tags set to On in your php.ini file, the error still shows up.

七七 2024-12-02 06:44:01

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

在 PHP 5.2 及更早版本中,解析器不允许 打开
标签是文件中唯一的东西。从 PHP 5.3 开始这是允许的。


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

This answered in the PHP Documentation for Basic Syntax:

In PHP 5.2 and earlier, the parser does not allow the <?php opening
tag to be the only thing in a file. This is allowed as of PHP 5.3.

However, by the OP it seems that the opening tag + space is allowed (i.e. not the only thing in a file). In addition, from the comments, it would seem that this is not the case for distro versions or otherwised patched.

眼中杀气 2024-12-02 06:44:01

我的 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

: 旁边添加更多内容

$ 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

希望它有帮助。在我看来,输入被视为文本,直到 打开序列后面出现空格。

My PHP version:

$ 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

The code in question:

$ echo -n "<?php" | php
<?php

Adding some more next to <?php:

$ echo -n "<?php/**/" | php
<?php/**/

or

$ echo -n "<?php;" | php
<?php;

and then a space:

$ echo -n "<?php " | php

(finally empty output).

That PHP version is not giving me a Parse error: syntax error, unexpected $end type of message for the examples above, but it does with this:

$ echo -n "<?php x" | php -d display_errors=1

Parse error: syntax error, unexpected $end in - on line 1

Hope it helps. In my eyes this looks like that the input is treated just as text until a whitespace follows up the <?php opening sequence.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文