popen

(PHP 4, PHP 5, PHP 7, PHP 8)

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

説明

popen(string $command, string $mode): resource|false

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

パラメータ

command

コマンド。

mode

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

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

戻り値

fopen() により返されたファイルポインタと同様のものを返しますが、 それは(読み書きのいずれか一方でのみ使われる)片方向ストリームであり、 pclose() によりクローズされなければならないところが異なります。 このポインタは、fgets()fgetss() および 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($handle2096);
echo 
$read;
pclose($handle);
?>

注意

注意:

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

参考

  • pclose() - プロセスのファイルポインタをクローズする
  • fopen() - ファイルまたは URL をオープンする
  • proc_open() - コマンドを実行し、入出力用にファイルポインタを開く

関連キーワード:  ポインタ, プロセス, オープン, モード, コマンド, popen, ファイル, pclose, command, mode