我有一个PHP类,它必须作为一个单独的进程启动Java main 执行必须是同步的,在结束后我必须读取stderr来处理并记录潜在的错误。
我看到从PHP运行单独进程的最流行的技术是exec()和proc_open()。 但是,我不明白我应该使用哪些以及如何使用。
Exec(),同步且易于使用,应该是我的最佳选择。但是,从我看到here on StackOverflow:PHP 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时我会得到任何相关的消息(错误可能会在以后发生!)。
我该怎么办?