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

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

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

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

Ответы

Ответ 1

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

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

Ответ 2

Если вы получите сообщение "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

Ответ 3

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

[[email protected] ~]$ 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"

[[email protected] ~]$ 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
[[email protected] ~]$

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