php://さまざまな入出力ストリームへのアクセス 説明PHP ではさまざまな入出力ストリームを提供しています。 これらを使うと、PHP 自身の入出力ストリームへのアクセスや 標準入出力と標準エラー出力のファイル記述子へのアクセス、 メモリやディスクを使ったテンポラリファイルストリームへのアクセスができ、 フィルタを使って他のファイルリソースの読み書きに手を加えることもできます。 php://stdin, php://stdout および php://stderr
php://stdin、php://stdout
および php://stderr は、PHP プロセスの
対応する入出力ストリームへの直接アクセスを許可します。
これらのストリームは複製されたファイル記述子を参照します。そのため、
php://stdin をオープンしたあとでそれを閉じたとしても、
識別子のコピーが閉じられるだけです。 php://stdin は読み込み専用で、 php://stdout および php://stderr は書き込み専用です。 php://input
php://input は読み込み専用のストリームで、
リクエストの body 部から生のデータを読み込むことができます。
enable_post_data_reading オプションが有効になっている場合、
かつ php://outputphp://output は書き込み専用のストリームで、 print および echo と同じ方法での出力バッファへの書き込みを許可します。 php://fdphp://fd は、指定したファイル記述子に直接アクセスすることができます。 たとえば php://fd/3 は、ファイル記述子 3 を指します。 php://memory および php://tempphp://memory および php://temp は読み書き可能なストリームで、一時データをファイルのように保存できるラッパーです。 両者の違いは、 php://memory が常にデータをメモリに格納するのに対して php://temp は定義済みの上限 (デフォルトは 2 MB) に達するとテンポラリファイルを使うという点です。 このテンポラリファイルの場所は、 sys_get_temp_dir 関数と同じ方法で決めます。
php://temp のメモリ制限を制御するには
警告
PHP の拡張モジュールによっては、 標準入出力が必須なものがあるかもしれません。 その場合、指定されたストリームを標準入出力のストリームにキャストしようとするかもしれませんが、メモリに格納するストリームの場合、このキャストは失敗する可能性があります。なぜなら、C言語の fopencookie 関数が使える必要があるからです。この関数は、Windows では 利用できません。 php://filterphp://filter は、フィルタアプリケーションが ストリームをオープンすることを許可するために設計されたメタラッパーです。 これは、readfile、file および file_get_contents のようなオールインワンの ファイル関数とともに使用すると有用です。これらの関数には、コンテンツが 読み込まれる前にストリームにフィルタを適用する手段がありません。 php://filter の対象は、 次のようなパラメータをパスの一部として受け取ります。 ひとつのパスに対して複数のフィルタチェインを指定できます。 これらのパラメータの詳細は、使用例を参照ください。
例例1 php://temp/maxmemory このオプションパラメータは、php://temp がテンポラリファイルを使うようになるまでのメモリの制限を設定します。
例2 php://filter/resource=<フィルタの対象となるストリーム> このパラメータは、 php://filter 指定の最後に存在し、フィルタリング したいストリームを指している必要があります。
例3 php://filter/read=<読み込みチェーンに適用するフィルタのリスト>
このパラメータは 1 つ以上のフィルタ名を
パラメータとしてとり、それらはパイプ文字
例4 php://filter/write=<書き込みチェーンに適用するフィルタのリスト>
このパラメータは 1 つ以上のフィルタ名を
パラメータとしてとり、それらはパイプ文字
例5 php://memory と php://temp は再利用できない php://memory と php://temp の再利用はできません。つまり、いったんストリームを閉じてしまったら、もうそれを参照できないということです。
|