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

Hap*_*per 4 php command-line exec

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

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

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

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

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

有任何想法吗?

int*_*ted 19

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

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

exec('some_command --option 2>&1', $output, $ret);
Run Code Online (Sandbox Code Playgroud)

这应该使您的php程序可以使用警告并防止不必要的日志记录.