For capturing stdout and stderr, when you don't care about the intermediate files, I've had better results with . . .<?phpfunction cmd_exec($cmd, &$stdout, &$stderr){ $outfile = tempnam(".", "cmd"); $errfile = tempnam(".", "cmd"); $descriptorspec = array( 0 => array("pipe", "r"), 1 => array("file", $outfile, "w"), 2 => array("file", $errfile, "w") ); $proc = proc_open($cmd, $descriptorspec, $pipes); if (!is_resource($proc)) return 255; fclose($pipes[0]); $exit = proc_close($proc); $stdout = file($outfile); $stderr = file($errfile); unlink($outfile); unlink($errfile); return $exit;}?>This isn't much different than a redirection, except it takes care of the temp files for you (you may need to change the directory from ".") and it blocks automatically due to the proc_close call. This mimics the shell_exec behavior, plus gets you stderr.