From e53654623b5bc9bdf3c77563c6afc26242c0e137 Mon Sep 17 00:00:00 2001 From: jason Date: Thu, 29 May 2008 04:42:12 -0400 Subject: [PATCH] fixed exec_pipe() but it doesn't give you stderr anymore --- misc.php | 47 ++++++++--------------------------------------- 1 file changed, 8 insertions(+), 39 deletions(-) diff --git a/misc.php b/misc.php index 35ed78d..bbe7013 100644 --- a/misc.php +++ b/misc.php @@ -40,12 +40,11 @@ function readable_sockets($pipes, $timeout = 0){ # Returns: (as array) # exit code # stdout -# stderr function exec_pipe($command, $stdin) { $descriptorspec = array( 0 => array('pipe', 'r'), // stdin is a pipe that the child will read from 1 => array('pipe', 'w'), // stdout is a pipe that the child will write to - 2 => array('pipe', 'w') // stderr is a pipe that the child will write to + 2 => array('file', '/dev/null', 'w') // stderr is a pipe that the child will write to ); $process = proc_open($command, $descriptorspec, $pipes); @@ -54,49 +53,19 @@ function exec_pipe($command, $stdin) { fwrite($pipes[0], $stdin); fclose($pipes[0]); - $stdout_open = true; - $stderr_open = true; - while($stdout_open || $stderr_open) { - $pipes_to_check = array(); - if($stdout_open) { - $pipes_to_check[] = $pipes[1]; - } - if($stderr_open) { - $pipes_to_check[] = $pipes[2]; - } - $readables = readable_sockets($pipes_to_check); - if($readables === false) { - die('select failed'); - } - foreach($readables as $pipe) { - $ret = fread($pipe, 4096); - if($ret === false) { - die('fread (in exec_pipe) failed'); - } - if($pipe = $pipes[1]) { - if($ret == '') { - fclose($pipes[1]); - $stdout_open = false; - } else { - $stdout .= $ret; - } - } - if($pipe = $pipes[2]) { - if($ret == '') { - fclose($pipes[2]); - $stderr_open = false; - } else { - $stderr .= $ret; - } - } - } + while (!feof($pipes[1])) { + $chunk = fread($pipes[1], 1024); + $stdout .= $chunk; + sleep(0.5); } + fclose($pipes[1]); + // It is important that you close any pipes before calling // proc_close in order to avoid a deadlock $return_value = proc_close($process); - return array($return_value, $stdout, $stderr); + return array($return_value, $stdout); } } -- 1.7.10.4