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