I am trying to figure out how to run a command line program within php and output both stout and stderr to a variable. All the examples either output the command line directly to the screen, or only output stdout for example
$data = shell_exec('ls -sdlfkjwer');
will output the following directly to the screen and not store anything in $data
ls: invalid option -- 'j'
Try 'ls --help' for more information.
And the following will store the output in $data
$data = shell_exec('ls -la');
because it is going to std out since there is no error. So the question is how can I route the std error to a variable as well when running command line programs from php?
This question does not answer my question because I am trying to do the exact OPPOSITE. I am trying to get it to a variable. PHP - How to get Shell errors echoed out to screen
Thank you
ok I was able to find a solution. You need to set up a native process to configure the pipes.
$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 file to write to
);
$cwd = '/tmp';
$env = array('some_option' => 'aeiou');
$process = proc_open('ls -lasdfsdfwefwekj', $descriptorspec, $pipes, $cwd, $env);
/*fwrite($pipes[0], '<?php print_r($_ENV); ?>');
*/
fclose($pipes[0]);
echo "stdout=".stream_get_contents($pipes[1]);
echo "stderr=".stream_get_contents($pipes[2]);
fclose($pipes[1]);
fclose($pipes[2]);
$return_value = proc_close($process);
echo "command returned $return_value\n";