proc_open で作成された 1 つのプロセスの出力を、proc_open (php) で作成された別のプロセスにパイプしたいと考えています。例えば。bash では、次のことができます。
[herbert@thdev1 ~]$ cat foo
2
3
1
[herbert@thdev1 ~]$ cat foo | sort
1
2
3
[herbert@thdev1 ~]$
戻りコード、パイプなどを制御するために、(shell_exec の代わりに) proc_open を使用して 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
「|」をシミュレートする方法を誰かが知っていますか つまり、cat-process の 2 番目の記述子を sort-process の最初の記述子に接続しますか? どんな助けでも大歓迎です!ただし、終了コードを確認してエラーをログに記録できるようにしたいので、shell_exec にリダイレクトしないでください :)。
編集:
私の仕事に必要なビジネスソリューションは次のとおりです。
while(!feof($searchPipes[1])) fwrite($lookupPipes[0], stream_get_line($searchPipes[1], 40000));
これは基本的にOSが行うことですが、私はそのためのカーネル/posixを持っているので、私自身のパイプ管理はしたくありません。正直に言うと、それは1976年ではありません:)