为什么 lint 不告诉我解析错误的行号和性质?

问题描述 投票:0回答:3

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

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

当文件包含语法错误时,它仅输出

Errors parsing xxx.php
。有没有办法让它告诉我错误的性质是什么,以及它在哪一行?也许另一个开关?

php lint
3个回答
43
投票

如果您收到“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 的类型。


22
投票

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

问题是我没有看到

stderr
输出,所以我首先将
2>&1
添加到相关命令的末尾。这仍然没有帮助,所以我意识到问题是 PHP 根本不输出 stderr 内容。我进入PHP安装目录并查看php.ini,发现默认情况下,
display_errors
Off
。将其更改为
On
现在可以使用了。


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 的输出?

© www.soinside.com 2019 - 2024. All rights reserved.