命令行- Php system() / exec() don't返回输出


command line - Php system() / exec() don't return output

对于像'ls'这样的常见命令,exec()可以正常工作,例如:

exec('ls',$output,$retval);
var_dump($output,$retval);
// $output contains an array of filenames, and retval === 0

但是当尝试执行另一个程序时,我无法得到输出:

exec('some_command --a_parameter',$output,$retval);
var_dump($output,$retval);
// $output contains an empty array, end $retval === 0

这个命令在直接从命令行执行时打印一些行。我知道命令已经成功了,因为结果(一些文件更新了,数据添加了,等等),但是我看不到输出。

任何想法?

听起来程序正在将其警告输出到标准错误而不是标准输出。exec只捕获标准输出。我不确定标准错误总是被发送到apache错误日志,但似乎很有可能。

如果您不需要与非*nix系统兼容,您可以通过将2>&1附加到命令后将标准错误重定向到标准输出:

exec('some_command --option 2>&1', $output, $ret);

这样既可以使php程序使用警告,又可以防止不必要的日志记录。

由于某些*原因,当应用程序发现一个警告(内部的,甚至不是致命的)

时,所有的输出都被发送到httpd/error_log

我的解决方案:当没有输出时,假设它失败了。我的apache日志会变得很脏,但是不管怎样。