Почему lint не говорит мне номер строки и характер ошибки разбора? - PullRequest
18 голосов
/ 27 июля 2010

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

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

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

Ответы [ 3 ]

37 голосов
/ 07 января 2013

Если вы получаете сообщение «Ошибки синтаксического анализа 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
21 голосов
/ 27 июля 2010

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

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

0 голосов
/ 27 июля 2010

Какую версию 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 ~]$

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

...