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";
我想弄清楚如何在 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";