(PHP 4, PHP 5, PHP 7, PHP 8)
popen — プロセスへのファイルポインタをオープンする
$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($handle, 2096);
echo $read;
pclose($handle);
?>
注意:
双方向(two-way)のサポートを求めているのなら、 proc_open() を使用してください。