php:捕获命令输出

时间:2010-06-23 07:13:53

标签: php

我使用exec函数在php中执行特定的可执行文件。

exec ( $file , $output , $return_value  ) ;

当给定文件成功执行时,我能够在第二个参数中获得输出 通过检查返回值,所以,它工作正常。但我的要求是由于某种原因导致命令执行失败。我需要获取该执行程序的错误消息。我需要做些什么才能得到错误。通过第二个参数,我们只能得到成功的输出。没有错误消息。

感谢。

3 个答案:

答案 0 :(得分:36)

第二个参数$output仅从您的可执行文件中捕获STDOUT。错误消息通常会发送到STDERR,以便可以轻松地将其写入错误日志或类似内容,但这意味着当您致电exec时,您将看不到它们。

如果这是一个Linux系统,您可以将2>&1附加到您的命令,以便将STDERR重定向到STDOUT。我没有试过这个,但它应该将错误消息转发给你的$ output变量。

修改

我已经在www.php.net/exec上阅读了它,看起来这样可行。

exec($file.' 2>&1', $outputAndErrors, $return_value);

还可以将错误重定向到临时文件并单独阅读。

exec($file.' 2> '.$tmpFile, $outputOnly, $return_value);

编辑2

似乎windows也使用这种Bourne样式输出重定向语法,因此这些示例也适用于Windows。

More on input and output streams

答案 1 :(得分:1)

如果您需要将stderr和stdout分开,请尝试 proc_open :   http://php.net/manual/en/function.proc-open.php

答案 2 :(得分:0)

$return_value将包含程序返回的错误代码,该错误代码应该足够有意义,我不认为你可以做得更好。

相关问题