озадачивающая ошибка парсера php - PullRequest
8 голосов
/ 18 июля 2011

Ладно, может быть, не так загадочно, но вот оно.

Я бездельничал и заметил это, набрав в файле просто <?php, только что, без пробела после этого, ничего, кроме тега, выдает ошибку разбора.

С одним пробелом все работает нормально. Мне было интересно, если кто-нибудь знает, почему парсер задыхается, так как в противном случае можно пропустить закрывающий тег. Спасибо.

Ответы [ 3 ]

6 голосов
/ 18 июля 2011

Документация PHP гласит:

В PHP 5.2 и более ранних версиях анализатор не позволяет открывающему тегу <?php быть единственным в файле.Это разрешено в PHP 5.3.

С учетом сказанного в PHP 5.3, если в вашем файле php.ini для short_open_tags установлено значение On, ошибка все равно появляется.

2 голосов
/ 18 июля 2011

Ответ на этот вопрос содержится в Документации PHP по основному синтаксису :

В PHP 5.2 и более ранних версиях анализатор не допускает, чтобы открывающий тег <?php был единственнымв файле.Это разрешено начиная с PHP 5.3.

Однако, с помощью OP кажется, что открывающий тег + пробел разрешен (то есть не единственная вещь в файле ).Кроме того, из комментариев может показаться, что это не относится к дистрибутивным версиям или другим исправленным .

1 голос
/ 18 июля 2011

Моя версия 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...