我正在使用exec函数在php中执行特定的可执行文件。php:捕获命令输出
exec ($file , $output , $return_value ) ;
当成功地执行我能够通过检查返回值来获得的第二个参数 输出,所以给定的文件,这是工作的罚款。但我的要求是当命令执行由于某种原因而失败时。我需要得到那个执行程序的错误信息。我需要做什么来获得错误。通过第二个参数,我们只能获得成功的输出。不是错误消息。
谢谢。
我正在使用exec函数在php中执行特定的可执行文件。php:捕获命令输出
exec ($file , $output , $return_value ) ;
当成功地执行我能够通过检查返回值来获得的第二个参数 输出,所以给定的文件,这是工作的罚款。但我的要求是当命令执行由于某种原因而失败时。我需要得到那个执行程序的错误信息。我需要做什么来获得错误。通过第二个参数,我们只能获得成功的输出。不是错误消息。
谢谢。
第二个参数$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工作了。
该$return_value
将有程序返回的错误代码,应该是足够的意义,我不认为你可以有更好的。
如果你需要保持stderr和标准输出分开,尽量proc_open: http://php.net/manual/en/function.proc-open.php