2010-06-23 167 views
13

我正在使用exec函数在php中执行特定的可执行文件。php:捕获命令输出

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

当成功地执行我能够通过检查返回值来获得的第二个参数 输出,所以给定的文件,这是工作的罚款。但我的要求是当命令执行由于某种原因而失败时。我需要得到那个执行程序的错误信息。我需要做什么来获得错误。通过第二个参数,我们只能获得成功的输出。不是错误消息。

谢谢。

回答

32

第二个参数$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工作了。

More on input and output streams

0

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