PHP使用proc#u打开并捕获';回声&x27;命令

PHP使用proc#u打开并捕获';回声&x27;命令,php,process,echo,proc-open,Php,Process,Echo,Proc Open,我一直在四处寻找,但没有找到这个问题的直接答案。首先,我要说明,我所要实现的并不一定特别有用,但部分目的是了解PHP如何与其他进程和流交互,等等 例如,在shell终端上,您可以运行类似于echo$USER的命令,它将输出名为USER的环境变量中的任何内容 我想知道是否可以执行这个命令,然后使用PHP的proc_open函数从shellecho命令捕获输出 这就是我目前正在尝试的: $descriptors = [['pipe', 'r'], ['pipe', 'w'], ['pipe', 'w

我一直在四处寻找,但没有找到这个问题的直接答案。首先,我要说明,我所要实现的并不一定特别有用,但部分目的是了解PHP如何与其他进程和流交互,等等

例如,在shell终端上,您可以运行类似于
echo$USER
的命令,它将输出名为
USER
的环境变量中的任何内容

我想知道是否可以执行这个命令,然后使用PHP的
proc_open
函数从shell
echo
命令捕获输出

这就是我目前正在尝试的:

$descriptors = [['pipe', 'r'], ['pipe', 'w'], ['pipe', 'w']];
$handle = proc_open('echo Hello world, $USER!', $descriptors, $pipes, null, ['USER' => 'guest']);
$world = stream_get_contents($pipes[0]);
$world
保持为空(即
'

我有一些理论解释为什么它不起作用(以及为什么每个理论在方括号中都可能是错误的),但我想知道是否有人可以证实其中一个,或者提供另一个解释解释为什么它不起作用


理论1 echo命令在PHP有机会读取输出之前立即终止。[真的吗?没有办法使用proc_open捕获立即终止的命令的输出吗?也许这不是proc_open的用途?]

理论2 echo以某种方式被视为一个shell内置命令,而不是一个独立的可执行文件,这就是为什么它的行为有所不同?[Linux在
/bin/echo
中提供了一个名为echo的可执行文件,难道它不能使用这个文件吗?再加上将
echo
更改为
/bin/echo
也不能解决问题]



提前感谢您

您正在阅读
$pipes[0]
。这是
stdin
。您想从映射到
stdout
$pipes[1]
中读取(并且具有写入的
w
标志):

输出

string(20) "Hello world, guest!
"
谢谢你指出这一点!
string(20) "Hello world, guest!
"