popen

(PHP 4, PHP 5, PHP 7)

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

説明

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

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

パラメータ

command

コマンド。

mode

モード。

返り値

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() を使用してください。

注意: セーフモード が有効な場合、 safe_mode_exec_dirの中にある実行プログラムのみ実行可能です。 実際的な理由により、現在、実行プログラムへのパスに ..を 含めることはできません。

警告

セーフモードが有効な場合、コマンド文字列は escapeshellcmd() でエスケープされます。 つまり、echo y | echo x は、echo y \| echo x となります。

参考

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