如何获得proc_open()的输出

我试图从php的proc_open方法得到输出,但是,当我打印它,我得到空。

 $ descriptorspec = array(
     0 => array(“pipe”,“r”),
     1 => array(“pipe”,“w”),
     2 => array(“file”,“files / temp / error-output.txt”,“a”)
 );

 $ process = proc_open(“time ./a a.out”,$ descriptorspec,$ pipes,$ cwd);

只要我知道,我可以得到stream_get_contents()的输出

 echo stream_get_contents($ pipes [1]);
 FCLOSE($pipe[1]); 

但是我不能这么做..有什么build议吗?

Thx之前…

Solutions Collecting From Web of "如何获得proc_open()的输出"

你的代码或多或少对我有用。 time打印输出到stderr所以如果你正在寻找输出,看看你的文件files/temp/error-output.txtstdout管道$pipes[1]将仅包含程序./a的输出。

我的报告:

 [edan@edan tmp]$ cat proc.php <?php $cwd='/tmp'; $descriptorspec = array( 0 => array("pipe", "r"), 1 => array("pipe", "w"), 2 => array("file", "/tmp/error-output.txt", "a") ); $process = proc_open("time ./a a.out", $descriptorspec, $pipes, $cwd); echo stream_get_contents($pipes[1]); fclose($pipes[1]); ?> [edan@edan tmp]$ php proc.php a.out here. [edan@edan tmp]$ cat /tmp/error-output.txt real 0m0.001s user 0m0.000s sys 0m0.002s 

这是proc_open()另一个例子。 我在这个例子中使用Win32的ping.exe命令。 CMIIW

 set_time_limit(1800); ob_implicit_flush(true); $exe_command = 'C:\\Windows\\System32\\ping.exe -t google.com'; $descriptorspec = array( 0 => array("pipe", "r"), // stdin 1 => array("pipe", "w"), // stdout -> we use this 2 => array("pipe", "w") // stderr ); $process = proc_open($exe_command, $descriptorspec, $pipes); if (is_resource($process)) { while( ! feof($pipes[1])) { $return_message = fgets($pipes[1], 1024); if (strlen($return_message) == 0) break; echo $return_message.'<br />'; ob_flush(); flush(); } } 

希望这有助于=)