Я называю php линт от пакетного файла Windows, как так:
@echo off
for %%f in (*.php) do php -l %%f
Когда файл содержит синтаксическую ошибку, это только выводы Errors parsing xxx.php
. Там какой-либо путь состоит в том, чтобы заставить это говорить мне, что природа ошибки, и какая строка это идет? Возможно, другой переключатель?
Я принял ответ Чарльза, но подумал, что должен добавить пару деталей, так как мне пришлось немного поискать, чтобы найти, что делать.
Проблема была в том, что я не видел stderr
, поэтому я начал с добавления 2>&1
в конец соответствующих команд. Это все равно не помогло, и я понял, что проблема в том, что PHP вообще не выводит stderr. Я пошел в каталог установки PHP, заглянул в php.ini и обнаружил, что по умолчанию display_errors
стоит Off
. Изменил его на On
и теперь все работает.
Какую версию 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?