php : 捕获命令输出

php
2022-08-30 22:57:50

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

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

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

谢谢。


答案 1

第二个参数仅从可执行文件中捕获。错误消息通常发送到,以便可以轻松地将它们写入错误日志或类似日志,但这意味着当您调用 时,您将看不到它们。$outputSTDOUTSTDERRexec

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

编辑:

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

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

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

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

编辑 2

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

详细了解输入和输出流


答案 2

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


推荐