как получить выход proc_open ()

Я попытался получить выход из метода proc_open в php, но, когда я его распечатаю, я получил пустой.

 $ descriptorspec = array (
     0 => array ("pipe", "r"),
     1 => массив ("труба", "w"),
     2 => массив («файл», «файлы / temp / error-output.txt», «a»)
 );

 $ process = proc_open («время ./a a.out», $ descriptorspec, $ pipes, $ cwd);

если я знаю, я могу получить вывод с помощью stream_get_contents()

 echo stream_get_contents ($ pipes [1]);
 fclose ($ труб [1]); 

Но я не могу этого сделать .. любое предложение?

Thx до …

Ваш код более или менее работает для меня. time выводит свой вывод на stderr поэтому, если вы ищете этот вывод, загляните в файлы files/temp/error-output.txt . Труба stdout $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(); } } 

Надеюсь, это поможет =)