Почему lint не сообщает мне номер строки и характер ошибки синтаксического анализа?

Я вызываю php lint из пакетного файла Windows, например:

@echo off
for %%f in (*.php) do php -l %%f

Когда файл содержит синтаксическую ошибку, он выводит только Errors parsing xxx.php. Есть ли способ заставить его сказать мне, какова природа ошибки и на какой строке она находится? Может другой переключатель?


person Hammerite    schedule 27.07.2010    source источник


Ответы (3)


Если вы получаете сообщение Errors parsing foo.php без каких-либо подробностей, этот параметр показывает ошибки при запуске PHP lint:

php -d display_errors=1 -l foo.php

Пример:

[somewhere]# php -l submit.php

Errors parsing submit.php

[somewhere]# php -d display_errors=1 -l submit.php

Parse error: syntax error, unexpected T_VARIABLE in submit.php on line 226
Errors parsing submit.php
person PJ Brunet    schedule 07.01.2013

Я принял ответ Чарльза, но подумал, что должен добавить пару деталей, так как мне пришлось провести дополнительную охоту, чтобы узнать, что делать.

Проблема заключалась в том, что я не видел вывод stderr, поэтому я начал с добавления 2>&1 в конец соответствующих команд. Это все еще не помогло, поэтому я понял, что проблема в том, что PHP вообще не выводит материал stderr. Я пошел в каталог установки PHP, посмотрел в php.ini и обнаружил, что по умолчанию display_errors равно Off. Изменил на On и теперь работает.

person Hammerite    schedule 27.07.2010
comment
О боже, это было неожиданно. Вы могли бы подумать, что просить PHP проверить синтаксис файла по умолчанию сообщит об ошибках синтаксиса! Имейте в виду, что вы можете управлять аргументами php.ini из командной строки, используя параметр -d: php -d display_errors=1 -l foo.php - person Charles; 27.07.2010
comment
Спасибо за совет! (пожалуйста, примите этот ответ, а не неправильный ответ выше ;-) - person yoyo; 08.03.2012

Какую версию PHP вы используете? Начиная с версии 5.3, номера строк включаются в вывод lint:

[charles@server ~]$ cat syntax_error.php
<?php
echo "This line is legal\n";
echo I'm a syntax error!\n;
echo "This line never gets reached.\n"

[charles@server ~]$ php -l syntax_error.php
PHP Parse error:  syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting ',' or ';' in syntax_error.php on line 3

Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting ',' or ';' in syntax_error.php on line 3
Errors parsing syntax_error.php
[charles@server ~]$

Ошибка появляется дважды, потому что она идет как на стандартный вывод, так и на стандартный вывод. Прошло давно с тех пор, как я работал с пакетными файлами в Windows, может быть, используемая вами версия выдает ошибку только в stderr, а пакетный файл отбрасывает вывод stderr?

person Charles    schedule 27.07.2010
comment
Это помогло мне выяснить, в чем проблема, поэтому я принял ее. Смотрите мой ответ для более подробной информации. - person Hammerite; 27.07.2010
comment
Можете ли вы принять ответ, который вы разместили ниже, поскольку он действительно объясняет проблему? - person Evan Donovan; 25.04.2014
comment
@Hammerite Пожалуйста, переключитесь на флаг «Принято» - я бы удалил этот ответ, чтобы сделать его более очевидным, но вы не можете самостоятельно удалить принятый ответ. - person Charles; 25.04.2014
comment
Спасибо, Чарльз, за ​​вашу любезность! :) - person Evan Donovan; 26.04.2014