我正在从 Windows 批处理文件中调用 php lint,如下所示:
@echo off
for %%f in (*.php) do php -l %%f
当文件包含语法错误时,它只输出Errors parsing xxx.php
. 有没有办法让它告诉我错误的性质是什么,它在哪一行?也许另一个开关?
如果您收到“解析 foo.php 错误”消息而没有任何详细信息,则此参数会在您运行 PHP lint 时显示错误:
php -d display_errors=1 -l foo.php
例子:
[某处]# php -l submit.php 解析 submit.php 时出错 [某处]# php -d display_errors=1 -l submit.php 解析错误:语法错误,第 226 行 submit.php 中的意外 T_VARIABLE 解析 submit.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 ~]$
该错误出现两次,因为它会同时出现在 stdout 和 stderr 中。自从我在 Windows 上使用批处理文件已经很长时间了,也许您使用的版本仅在 stderr 上发出错误,而批处理文件正在丢弃 stderr 的输出?