php://stdin、php://stdout および php://stderr は、PHP プロセスの 対応する入出力ストリームへのアクセスを許可します。 これらのストリームは複製されたファイル記述子を参照します。そのため、 php://stdin をオープンしたあとでそれを閉じたとしても、 識別子のコピーが閉じられるだけです。STDIN で参照される実際のストリームは何も影響を受けません。 PHP 5.2.1 より前のバージョンでは、これに関連する挙動にバグがあります。 これらのラッパーを使うのではなく、定数 STDIN, STDOUT および STDERR を使用することを推奨します。
php://output は、 print() および echo() と同じ方法での出力バッファへの書き込みを許可します。
php://input は、POST の生データの読み込みを 許可します。これは $HTTP_RAW_POST_DATA に比べて メモリ消費量が少なく、特別な php.ini ディレクティブを設定する 必要がありません。php://input は、 enctype="multipart/form-data" に対しては 使用できません。
php://stdin および php://input は読み込み専用で、 php://stdout、 php://stderr および php://output は書き込み専用です。
php://filter は、フィルタアプリケーションが ストリームをオープンすることを許可するために設計されたメタラッパーです。 これは、readfile()、file() および file_get_contents() のようなオールインワンの ファイル関数とともに使用すると有用です。これらの関数には、コンテンツが 読み込まれる前にストリームにフィルタを適用する手段がありません。
php://filter の対象は、以下のように 'parameters' を 'path' の一部として保持します。
/resource=<フィルタの対象となるストリーム> (必須)このパラメータは、 php://filter 指定の最後に存在し、フィルタリング したいストリームを指している必要があります。
<?php
/* これは単純に以下と同じです。
readfile("http://www.example.com");
なぜなら、実際のところ何のフィルタ処理も行われないからです。 */
readfile("php://filter/resource=http://www.example.com");
?>
/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");
?>
/write=<書き込みチェーンに適用するフィルタのリスト> (任意)このパラメータは 1 つ以上のフィルタ名を パラメータとしてとり、それらはパイプ文字 | で区切られます。
<?php
/* これは、文字列 "Hello World"
に対して rot13 フィルタを適用し、カレントディレクトリの
example.txt に書き込みます。 */
file_put_contents("php://filter/write=string.rot13/resource=example.txt","Hello World");
?>
php://memory ラッパーは、データをメモリに保存します。 php://temp も同様ですが、メモリの制限 (デフォルトは 2 MB です) を超過した際にはテンポラリファイルを使用します。
php://temp ラッパーは、次の 'parameters' を 'path' の一部として受け付けます。
/maxmemory:<バイト数> (任意) このパラメータは、メモリの制限 (データをテンポラリファイルに移動する閾値) のデフォルト値を変更します。
<?php
$fiveMBs = 5 * 1024 * 1024;
$fp = fopen("php://temp/maxmemory:$fiveMBs", 'r+');
fputs($fp, "hello\n");
// 先ほど書き込んだデータを読み込みます。
rewind($fp);
echo stream_get_contents($fp);
?>
属性 | サポートの有無 |
---|---|
allow_url_fopen で制約される | No |
allow_url_include で制約される | php://input、 php://stdin、 php://memory および php://temp のみ。 |
読み込み許可 | php://stdin、 php://input、 php://memory および php://temp のみ。 |
書き込み許可 | php://stdout、 php://stderr、 php://output、 php://memory および php://temp のみ。 |
追加許可 | php://stdout、 php://stderr、 php://output、 php://memory および php://temp のみ (書き込みと同じ)。 |
同時読み書き許可 | php://memory および php://temp のみ。 |
stat() のサポート | php://memory および php://temp のみ。 |
unlink() のサポート | No |
rename() のサポート | No |
mkdir() のサポート | No |
rmdir() のサポート | No |