Php system()/ exec()不返回输出

时间:2011-04-09 03:04:07

标签: php command-line exec

对于像'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

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

有什么想法吗?

2 个答案:

答案 0 :(得分:19)

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

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

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

这应该既可以为你的php程序提供警告,也可以防止不必要的日志记录。

答案 1 :(得分:0)

当某些 * 原因,当应用程序发现警告(内部,甚至不是致命)时,所有输出都被发送到httpd / error_log

我的解决方案:当没有输出时,假设它失败了。 我的apache日志会变脏,但无论如何。

相关问题