Мне хотелось бы, чтобы результат одного процесса, созданного с помощью proc_open, был передан на другой, созданный с помощью proc_open (в php). Например. В Баше я могу сделать:Подключить трубы процессов в php
[[email protected] ~]$ cat foo
2
3
1
[[email protected] ~]$ cat foo | sort
1
2
3
[[email protected] ~]$
Я хотел бы, чтобы имитировать это в PHP с использованием proc_open (вместо shell_exec) для того, чтобы иметь контроль над возвратными кодами, трубами и т.д. Так что я хочу что-то вроде этого:
$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
Кто-нибудь знает, как я смогу имитировать «|» bash в php, т. е. подключить второй дескриптор cat-процесса к первому дескриптору sort-процесса? Любая помощь будет оценена! Но, пожалуйста, не перенаправляйте меня на shell_exec, так как я хочу проверить коды выхода и ошибки журнала :).
EDIT:
Мои потребности к работе бизнес-решение КСТАТИ является:
while(!feof($searchPipes[1])) fwrite($lookupPipes[0], stream_get_line($searchPipes[1], 40000));
Что в основном то, что операционная система будет делать, но я не хочу, чтобы мой собственный трубы-менеджмент , так как у меня есть ядро / posix для этого, и, честно говоря, это не 1976 :)
Извините, что не заметил вашего ответа :) Я уже исправил это с помощью взлома, но сегодня я проверил ваш код, и он работает и работает, когда мы говорим! Большое спасибо! :) – Herbert