20

我正在从 Windows 批处理文件中调用 php lint,如下所示:

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

当文件包含语法错误时,它只输出Errors parsing xxx.php. 有没有办法让它告诉我错误的性质是什么,它在哪一行?也许另一个开关?

4

3 回答 3

42

如果您收到“解析 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 时出错
于 2013-01-07T17:29:43.253 回答
22

我已经接受了查尔斯的回答,但认为我应该添加一些细节,因为我必须做一些额外的搜索才能找出该怎么做。

问题是我没有看到stderr输出,所以我从添加2>&1到相关命令的末尾开始。这仍然没有帮助,所以我意识到问题在于 PHP 根本没有输出 stderr 的东西。我去了PHP安装目录,查看了php.ini,发现默认display_errorsOff. 将其更改为On现在可以使用。

于 2010-07-27T12:39:57.100 回答
0

您使用的是什么版本的 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 的输出?

于 2010-07-27T01:22:11.763 回答