popen

プロセスへのファイルポインタをオープンする

説明

resourcefalse popen(string $command, string $mode)

command で指定したコマンドのフォークによってできたプロセスへのパイプをオープンします。

パラメータ

command

コマンド。

mode

モード。読み取りを行う場合は 'r' を。 書き込みを行う場合は 'w' を指定します。

Windows では、popen はデフォルトでテキストモードになります。 つまり、パイプから \n 文字を読み込んだり、書き込んだりすると、 \r\n に変換されるということです。 この振る舞いを望まない場合は、 mode にバイナリモードを指定し、強制することが出来ます。 読み取りのバイナリモードは 'rb' を。 書き込みのバイナリモードは'wb' をそれぞれ指定します。

戻り値

fopen により返されたファイルポインタと同様のものを返しますが、 それは(読み書きのいずれか一方でのみ使われる)片方向ストリームであり、 pclose によりクローズされなければならないところが異なります。 このポインタは、fgetsfgetss および fwrite のいずれかで使うことができます。 モードが 'r' のときは、返されるファイルポインタは そのコマンドの STDOUT と等しくなります。また、モードが 'w' のときは、返されるファイルポインタは そのコマンドの STDIN と等しくなります。

エラーが発生した場合は false を返します。

例1 popen の例

<?php
$handle = popen("/bin/ls", "r");
?>

実行すべきコマンドが見つからない場合には、正常なリソースが返されます。 おかしなことと思われるかもしれませんが、これには意味があります。 これによってシェルから返されたエラーメッセージにアクセスすることができるのです。

例2 popen の例

<?php
error_reporting(E_ALL);

/* リダイレクトにより、標準エラー出力を取得します */
$handle = popen('/path/to/executable 2>&1', 'r');
echo "'$handle'; " . gettype($handle) . "\n";
$read = fread($handle, 2096);
echo $read;
pclose($handle);
?>

注意

注意:

双方向(two-way)のサポートを求めているのなら、 proc_open を使用してください。

参考

  • pclose
  • fopen
  • proc_open