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...
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
                        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 =)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With