[英]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日志会变脏,但无论如何。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.