popen

(PHP 3, PHP 4, PHP 5)

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

説明

int popen ( string command, string mode )

command で与えられたコマンドを fork() して実行し、そのプロセスへのパイプをオープンします。

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

エラーが起こった場合 FALSE を返します。

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

例 1. popen() の例

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

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

<?php
error_reporting
( E_ALL );

/* Add redirection so we can get stderr. */
$handle = popen ( '/path/to/spooge 2>&1' , 'r' );
echo
"'$handle'; " . gettype ( $handle ) . "\n" ;
$read = fread ( $handle , 2096 );
echo
$read ;
pclose ( $handle );
?>

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

警告

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

pclose() fopen() proc_open() も参照してください。