php:捕获命令输出

Pav*_*mar 14 php

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

exec ( $file , $output , $return_value  ) ;
Run Code Online (Sandbox Code Playgroud)

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

谢谢.

Iva*_*sen 36

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

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

编辑:

我已经在www.php.net/exec上阅读了它,似乎这会起作用.

exec($file.' 2>&1', $outputAndErrors, $return_value);
Run Code Online (Sandbox Code Playgroud)

也可以将错误重定向到临时文件并单独读取它们.

exec($file.' 2> '.$tmpFile, $outputOnly, $return_value);
Run Code Online (Sandbox Code Playgroud)

编辑2

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

有关输入和输出流的更多信息