proc_open() は popen() と よく似ていますが、プログラムの実行をさらに細かく制御できる点で違います。 cmd は、シェルによって実行されるコマンドです。 descriptorspec は、キーがディスクリプタの番号で、 値がどのようにディスクリプタを子プロセスに渡すかを示す配列です。 pipes は、生成された、PHP 側のパイプの終端にあたる ファイルポインタを格納した配列にセットされます。 返値はプロセスを表すリソースです。処理が終わったら、 proc_close() を使ってリソースを開放しなくては いけません。
$descriptorspec = array( |
descriptorspec における ファイルディスクリプタの番号は、特に 0, 1, 2 に限られているわけでは ありません。有効であるどのようなファイルディスクリプタの番号も指定でき、 それは子プロセスに渡されます。これにより、あるスクリプトと、 子プロセスとして起動している別のスクリプトとの間で通信ができます。 特に、これは PGP や GPG、openssl といったプログラムにパスフレーズを より安全な方法で渡したいとき威力を発揮します。 補助的なファイルディスクリプタを介して、そのようなプログラムの 状態を取得するのにも便利です。
注意: Windows における互換性: 2 (stderr) よりも大きな番号のディスクリプタは 子プロセスに継承可能なハンドルとして渡されますが、 Windows のアーキテクチャは、ファイルディスクリプタの番号と より低レベルなハンドルを関連付けないので、子プロセスは、 それらのハンドルにアクセスする術を持ちません。stdin, stdout, stderr は期待通り動きます。
注意: この関数は PHP 4.3.0 で導入されました。
注意: もし一方向のパイプを利用したいだけでしたら、 popen() を使うほうがより簡単です。
exec(), system(), passthru(), popen(), escapeshellcmd(), backtick operator も参照下さい。