PHP:执行命令作为同步进程并读取stderr

时间:2017-10-06 21:42:06

标签: php process synchronous stderr

我有一个PHP类,它必须作为一个单独的进程启动Java main 执行必须是同步的,在结束后我必须读取stderr来处理并记录潜在的错误。

我看到从PHP运行单独进程的最流行的技术是exec()和proc_open()。 但是,我不明白我应该使用哪些以及如何使用。

Exec(),同步且易于使用,应该是我的最佳选择。但是,从我看到here on StackOverflowPHP StdErr after Exec(),似乎获取stderr的唯一方法是为它显式创建一个文件。在我看来,这似乎不是一个优雅的解决方案。

转而,proc_open似乎是一个非常强大的工具,它允许直接,单独访问stdin,stdout和stderr。 对于我需要做的事情,代码应该是这样的:

$proc = proc_open($cmd,[2 => ['pipe','w']],$pipes);
$stderr = stream_get_contents($pipes[2]);
fclose($pipes[2]);
proc_close($proc);
$error = var_dump($stderr)

问题是proc_open是异步的,所以如果我做对了,我不能确定当我运行stream_get_contents时我会得到任何相关的消息(错误可能会在以后发生!)。

我该怎么办?

0 个答案:

没有答案