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

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

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

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

18
задан jeb 17 January 2019 в 08:12
поделиться

2 ответа

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

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

21
ответ дан 30 November 2019 в 06:04
поделиться

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

0
ответ дан 30 November 2019 в 06:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: