我从 Windows 批处理文件中调用 php lint,如下所示:
@echo off
for %%f in (*.php) do php -l %%f
当文件包含语法错误时,它仅输出
Errors parsing xxx.php
。有没有办法让它告诉我错误的性质是什么,以及它在哪一行?也许另一个开关?
如果您收到“Errors parsing foo.php”消息但没有任何详细信息,则可以在运行 PHP lint 时强制将两个相关的错误输出指令作为参数:
php -d display_errors=1 -d error_reporting=4 -l foo.php
示例:
[somewhere]# php -l submit.php
Errors parsing submit.php
[somewhere]# php -d display_errors=1 -d error_reporting=4 -l submit.php
Parse error: syntax error, unexpected T_VARIABLE in submit.php on line 226
Errors parsing submit.php
根据 文档,
display_errors
需要一个真值,error_reporting
可以设置为 4
(E_PARSE
),因为这是唯一会报告 linting 的类型。
我已经接受了查尔斯的回答,但我认为我应该添加一些细节,因为我必须做一些额外的搜索才能找出该怎么做。
问题是我没有看到
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 的输出?