proc_open() は popen() と よく似ていますが、プログラムの実行をさらに細かく制御できる点で違います。
cmd
実行されるコマンド。
descriptorspec
数値添字の配列で、ディスクリプタ番号をキーとし、PHP がその ディスクリプタをどのように子プロセスに渡すかを表すのが 対応する値となります。 0 が標準入力 (stdin)、1 が標準出力 (stdout) で、 2 が標準エラー出力 (stderr) となります。
現在サポートされているパイプ形式は file および pipe です。
ファイルディスクリプタの番号は、特に 0, 1, 2 に限られているわけでは ありません。有効であるどのようなファイルディスクリプタの番号も指定でき、 それは子プロセスに渡されます。これにより、あるスクリプトと、 子プロセスとして起動している別のスクリプトとの間で通信ができます。 特に、これは PGP や GPG、openssl といったプログラムにパスフレーズを より安全な方法で渡したいとき威力を発揮します。 補助的なファイルディスクリプタを介して、そのようなプログラムの 状態を取得するのにも便利です。
pipes
PHP 側で生成されたパイプの終端にあたる ファイルポインタの配列。
cwd
コマンドの初期作業ディレクトリ。 完全パスである必要があります。 デフォルト値 (現在の PHP プロセスの作業ディレクトリ) を使用したい場合は NULL を指定します。
env
実行するコマンドのための環境変数の配列。 現在の PHP プロセスと同じ環境変数を使用する場合は NULL を指定します。
other_options
その他の追加オプションを指定することが可能です。 現在サポートされているオプションは次の通りです。
suppress_errors (windows のみ): TRUE にすると、この関数が出力するエラーを抑制します。 |
bypass_shell (windows のみ): TRUE にすると、cmd.exe シェルをバイパスします。 |
context: ファイルをオープンする際に (stream_context_create() で作成した) ストリームコンテキストを使用します。 |
binary_pipes: パイプをバイナリモードでオープンします。 通常の stream_encoding は使用しません。 |
注意: Windows における互換性: 2 (stderr) よりも大きな番号のディスクリプタは 子プロセスに継承可能なハンドルとして渡されますが、 Windows のアーキテクチャは、ファイルディスクリプタの番号と より低レベルなハンドルを関連付けないので、子プロセスは、 それらのハンドルにアクセスする術を持ちません。stdin, stdout, stderr は期待通り動きます。
注意: もし単方向(一方向)のパイプを利用したいだけでしたら、 popen() を使うほうがより簡単です。