6

使用php -l myFile.php命令 (PHP 5.5.30) 时,如果文件有语法错误,那么我会收到正确的警告和堆栈跟踪等。

但是,如果文件没有语法警告,我会收到消息

在 myFile.php 中未检测到语法错误

当语法有效时,有没有办法让命令没有输出?我只关心一个文件是否有无效的语法——我不需要一条消息说它是有效的。

4

4 回答 4

9

The "no syntax errors..." message is sent out on the stdout while the syntax errors are sent out on stderr. You can redirect those to somewhere like /dev/null if you don't want them.

php -l file.php 1> /dev/null

that will output the errors if there were any or nothing if no errors. You do lose the "Errors parsing..." message, but will get the errors if there was a problem.

于 2015-12-11T00:40:39.200 回答
3

如果命令成功(返回 0),您可以使用chronic来抑制所有输出:

chronic php -l myFile.php

描述

chronic运行命令,并安排其标准输出和标准错误仅在命令失败(退出非零或崩溃)时显示。如果命令成功,任何无关的输出都将被隐藏。

在 Debian 上,它在moreutils包中。

于 2018-04-20T10:37:44.423 回答
1

不要检查输出,检查返回码。

$ php -l good.php &> /dev/null; echo $?
0

$ php -l bad.php &> /dev/null; echo $?
255

所以:

if ! php -l somescript.php &> /dev/null; then
  echo 'OH NOES!'
fi

或者,如果你觉得很花哨:

if ! foo=$(php -l somescript.php 2>&1); then
  echo $foo
fi
于 2015-12-11T01:01:16.797 回答
-1
php -ln script.php >/dev/null || php -ln script.php

编辑:

chronic php -ln script.php
于 2018-04-20T07:29:34.730 回答