php 运行 命令行和管道 stderr 到变量

php run command line and pipe std err to variable

我想弄清楚如何在 php 中 运行 一个命令行程序并将 stout 和 stderr 输出到一个变量。所有示例要么将命令行直接输出到屏幕,要么只输出标准输出,例如

$data =  shell_exec('ls -sdlfkjwer');

将直接在屏幕上输出以下内容,而不在 $data

中存储任何内容
ls: invalid option -- 'j'
Try 'ls --help' for more information.

下面将输出存储在$data

$data =  shell_exec('ls -la');

因为没有错误,所以它会被标准输出。所以问题是,当 运行ning 来自 php?

的命令行程序时,如何将 std 错误路由到变量?

这个问题没有回答我的问题,因为我正在尝试做完全相反的事情。我想把它变成一个变量。 PHP - How to get Shell errors echoed out to screen

谢谢

好的,我找到了解决方案。您需要设置一个本机进程来配置管道。

$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";