Shell脚本 - PHP - 显示错误

时间:2014-05-22 12:22:08

标签: php bash shell

我使用PHP函数shell_exec()来执行Shell脚本。 当我使用这个(正确的)语法时,它通常显示输出

echo shell_exec("ls -l");

但是,由于某种原因,如果用户输入这样的无效命令

echo shell_exec("lsl -l");

默认情况下,它应该在终端上给出错误。但是,它没有显示任何东西。是否有任何方法来捕捉和显示错误;通过PHP?

2 个答案:

答案 0 :(得分:3)

这是因为错误的输出转到STDERR,而shell_exec只读取STDOUT。最简单的解决方案可能是将STDERR传递给STDOUT

<?php
echo shell_exec('lsl -l 2>&1');

如果您只想知道命令是否成功,我会使用exec而不是shell_exec,因为您可以获得返回值。

答案 1 :(得分:1)

来自PHP docs

  

当发生错误或程序没有输出时,此函数可以返回NULL。使用此功能无法检测执行失败。当需要访问程序退出代码时,应使用exec()。

如果您选择使用exec(),则可以为函数提供第三个参数,该参数将返回参数的输出:

exec ( string $command [, array &$output [, int &$return_var ]] )
  

如果return_var参数与输出参数一起出现,则执行命令的返回状态将写入此变量。