我想与proc_open创建一个处理的输出,以通过管道输送到与proc_open(在PHP)创建的另一个。 例如。 在bash我可以这样做:
[herbert@thdev1 ~]$ cat foo
2
3
1
[herbert@thdev1 ~]$ cat foo | sort
1
2
3
[herbert@thdev1 ~]$
我想为了使用proc_open(代替了shell_exec)有过返回码,管道等,所以我想是这样的控制在PHP来模拟这一点:
$catPipes=array();
$sortPipes=array();
$cwd = '/tmp';
$env = array();
$catProcess = proc_open("cat foo", array(
0 => array("pipe", "r"),
1 => array("pipe", "w")
), $catPipes, $cwd, $env);
$sortProcess = proc_open("sort", array(
0 => array("pipe", "r", $catPipes[1]),
1 => array("pipe", "w"),
), $sortPipes, $cwd, $env);
echo stream_get_contents($sortPipes[1]);
fclose($sortPipes[1]);
//proc_close(this) ... proc_close(that) ... etc
会有人知道我可以模拟出“|” 在PHP中的bash,即猫过程的第二描述符连接至该整理过程的第一个描述符? 任何帮助,将不胜感激! 但是,请不要重定向我了shell_exec,因为我希望能够检查出码并记录错误:)。
编辑:
我需要对工作的业务解决方案BTW是:
while(!feof($searchPipes[1])) fwrite($lookupPipes[0], stream_get_line($searchPipes[1], 40000));
这基本上是什么操作系统会做,但我不希望我自己管的管理,因为我有一个内核/ POSIX,并且说实话,这不是1976年:)