使用php -l myFile.php
命令 (PHP 5.5.30) 时,如果文件有语法错误,那么我会收到正确的警告和堆栈跟踪等。
但是,如果文件没有语法警告,我会收到消息
在 myFile.php 中未检测到语法错误
当语法有效时,有没有办法让命令没有输出?我只关心一个文件是否有无效的语法——我不需要一条消息说它是有效的。
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.
如果命令成功(返回 0),您可以使用chronic
来抑制所有输出:
chronic php -l myFile.php
描述
chronic
运行命令,并安排其标准输出和标准错误仅在命令失败(退出非零或崩溃)时显示。如果命令成功,任何无关的输出都将被隐藏。
在 Debian 上,它在moreutils
包中。
不要检查输出,检查返回码。
$ 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
php -ln script.php >/dev/null || php -ln script.php
编辑:
chronic php -ln script.php