サポートするプロトコル/ラッパー
PHP Manual

PHP 入出力

PHP 入出力さまざまな入出力ストリームへのアクセス

説明

php://stdinphp://stdout および php://stderr は、PHP プロセスの 対応する入出力ストリームへの直接アクセスを許可します。 これらのストリームは複製されたファイル記述子を参照します。そのため、 php://stdin をオープンしたあとでそれを閉じたとしても、 識別子のコピーが閉じられるだけです。STDIN で参照される実際のストリームは何も影響を受けません。 PHP 5.2.1 より前のバージョンでは、これに関連する挙動にバグがあります。 これらのラッパーを使うのではなく、定数 STDIN, STDOUT および STDERR を使用することを推奨します。

php://output は、 print() および echo() と同じ方法での出力バッファへの書き込みを許可します。

php://input は、リクエストの body 部から生のデータを読み込むことができます。 POST リクエストの場合は $HTTP_RAW_POST_DATA よりもこちらを使うのが望ましいでしょう。php.ini ディレクティブの設定に依存しないからです。 さらに、$HTTP_RAW_POST_DATA がデフォルトで設定されない場合は、 always_populate_raw_post_data を有効にするよりも $HTTP_RAW_POST_DATA を使うほうがメモリの消費量が少なくなるでしょう。 php://input は、 enctype="multipart/form-data" に対しては使用できません。

注意: php://input でオープンしたストリームは、は一度しか読み込めません。 また、このストリームは seek 操作をサポートしていません。 しかし、SAPI の実装によっては、別の php://input ストリームをオープンして読み込みを再開できる可能性もあります。 これは、リクエストの body 部のデータが保存されている場合にのみ可能となります。 通常、POST リクエストの場合はそのようになりますが、 PUT や PROPFIND といった他のメソッドの場合は保存されません。

php://stdin および php://input は読み込み専用で、 php://stdoutphp://stderr および php://output は書き込み専用です。

php://filter は、フィルタアプリケーションが ストリームをオープンすることを許可するために設計されたメタラッパーです。 これは、readfile()file() および file_get_contents() のようなオールインワンの ファイル関数とともに使用すると有用です。これらの関数には、コンテンツが 読み込まれる前にストリームにフィルタを適用する手段がありません。

php://filter の対象は、以下のように 'parameters' を 'path' の一部として保持します。

オプション

オプション

ラッパーの概要(php://filter については、 フィルタされる側のラッパーの概要を参照します)
属性 サポートの有無
allow_url_fopen で制約される No
allow_url_include で制約される php://inputphp://stdinphp://memory および php://temp のみ。
読み込み許可 php://stdinphp://inputphp://memory および php://temp のみ。
書き込み許可 php://stdoutphp://stderrphp://outputphp://memory および php://temp のみ。
追加許可 php://stdoutphp://stderrphp://outputphp://memory および php://temp のみ (書き込みと同じ)。
同時読み書き許可 php://memory および php://temp のみ。
stat() のサポート php://memory および php://temp のみ。
unlink() のサポート No
rename() のサポート No
mkdir() のサポート No
rmdir() のサポート No
stream_select() のサポート php://stdin, php://stdout, php://stderr および php://temp.

例1 /resource=<フィルタの対象となるストリーム> (必須)

このパラメータは、 php://filter 指定の最後に存在し、フィルタリング したいストリームを指している必要があります。

<?php
/* これは単純に以下と同じです。
   readfile("http://www.example.com");
   なぜなら、実際のところ何のフィルタ処理も行われないからです。 */

readfile("php://filter/resource=http://www.example.com");
?>

例2 /read=<読み込みチェーンに適用するフィルタのリスト> (任意)

このパラメータは 1 つ以上のフィルタ名を パラメータとしてとり、それらはパイプ文字 | で区切られます。

<?php
/* これは、www.example.com のすべての内容を
   大文字に変換して出力します。 */
readfile("php://filter/read=string.toupper/resource=http://www.example.com");

/* これは上の例と同じですが、それに加えて
   ROT13 エンコード処理を行います。 */
readfile("php://filter/read=string.toupper|string.rot13/resource=http://www.example.com");
?>

例3 /write=<書き込みチェーンに適用するフィルタのリスト> (任意)

このパラメータは 1 つ以上のフィルタ名を パラメータとしてとり、それらはパイプ文字 | で区切られます。

<?php
/* これは、文字列 "Hello World"
   に対して rot13 フィルタを適用し、カレントディレクトリの
   example.txt に書き込みます。 */
file_put_contents("php://filter/write=string.rot13/resource=example.txt","Hello World");
?>

/<両方のチェーンに適用するフィルタのリスト>任意read= あるいは write= の指定をされていないすべてのフィルタは、 読み込みチェーンと書き込みチェーンの両方に(適宜)適用されます。

php://memory ラッパーは、データをメモリに保存します。 php://temp も同様ですが、メモリの制限 (デフォルトは 2 MB です) を超過した際にはテンポラリファイルを使用します。

php://temp ラッパーは、次の 'parameters' を 'path' の一部として受け付けます。

例4 /maxmemory:<バイト数> (任意)

このパラメータは、メモリの制限 (データをテンポラリファイルに移動する閾値) のデフォルト値を変更します。

<?php
$fiveMBs 
1024 1024;
$fp fopen("php://temp/maxmemory:$fiveMBs"'r+');

fputs($fp"hello\n");

// 先ほど書き込んだデータを読み込みます。
rewind($fp);
echo 
stream_get_contents($fp);
?>

サポートするプロトコル/ラッパー
PHP Manual