how to get output of proc_open()
Domanda
I've tried to get output from proc_open
method in php, but, when I print it, I got empty.
$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);
as long as I know, I can get the output with stream_get_contents()
echo stream_get_contents($pipes[1]); fclose($pipes[1]);
But I can't do that.. any suggestion?
Thx before...
Soluzione
Your code more or less works for me. time
prints its output to stderr
so if you're looking for that output, look in your file files/temp/error-output.txt
. The stdout
pipe $pipes[1]
will only contain the output of the program ./a
.
My repro:
[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
Altri suggerimenti
this is another example with proc_open()
.
I am using Win32 ping.exe command in this example. 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();
}
}
Hope this helps =)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow