ホームページ  >  記事  >  バックエンド開発  >  phpの特殊なプロトコル、php://プロトコルの詳細説明

phpの特殊なプロトコル、php://プロトコルの詳細説明

墨辰丷
墨辰丷オリジナル
2018-05-15 17:48:282552ブラウズ

この記事では主にphpの特別なプロトコルを紹介します。php://プロトコルについては詳しく説明されており、興味のある友人はさらに学ぶことができます。

php://さまざまな入出力ストリーム (I/O ストリーム) へのアクセス


説明


PHP は、アクセスを許可するさまざまな入出力 (IO) ストリームを提供します。 PHP への入力および出力ストリーム、標準入出力およびエラー記述子、メモリおよびディスク バックアップ内の一時ファイル ストリーム、および他の読み取りおよび書き込みファイル リソースで動作できるフィルター。


php://stdin、php://stdout、php://stderr


、直接アクセスを許可します PHP プロセスの対応する入力または出力ストリーム。 データ ストリームはコピーされたファイル記述子を参照するため、ファイルを開いて閉じると、 これらのラッパーを手動で開く代わりに、実際に参照されている STDIN 并不受影响。 注意 PHP 在这方面的行为有很多 BUG 直到 PHP 5.2.1。 推荐你简单使用常量 STDIN、 STDOUT 和 STDERR のコピーを閉じるだけです。

は読み取り専用であり、書き込み専用です。


php://input


は、要求された生データにアクセスできる読み取り専用ストリームです。 POST リクエストの場合は、特定のディレクティブに依存しないため、 の代わりに を使用することをお勧めします。 さらに、この場合、デフォルトではパディングはありません。 always_populate_raw_post_data をアクティブにするよりも必要なメモリが少なくなる可能性があります。 enctype="multipart/form-data" は無効です。

: 開かれたデータ ストリームは 1 回だけ読み取ることができます。 データ ストリームはシーク操作をサポートしません。 ただし、SAPI の実装によっては、リクエスト本文のデータが保存されるときに、別のデータ ストリームを開いて再読み取ることができます。 通常、これは POST リクエストにのみ当てはまり、PUT や PROPFIND などの他のリクエスト メソッドには当てはまりません。


php://output


は書き込み専用のデータストリームです。 echoと同じ方法でprintを行うことができます 出力バッファに書き込みます。


php://fd


指定されたファイル記述子への直接アクセスを許可します。 たとえば、ファイル記述子 3 を参照します。


php://memory と php://temp


は類似したファイルです 一時データの読み取りと書き込みを可能にするデータ ストリームのラッパー。 2 つの唯一の違いは、データは常にメモリに保存されるのに対し、メモリ量が事前定義された制限に達すると削除されることです (デフォルトは 2MB)が一時ファイルに保存されます。 一時ファイルの場所は sys_get_temp_dir() と同じ方法で決定されます。

メモリ制限は /maxmemory:NN を追加することで制御できます。NN はメモリに保持される最大データ量 (バイト単位) です。


php://filter


はメタラッパーです。 データ ストリームが開かれているときにアプリケーションをフィルタリングするために設計されています。 これは、readfile()file()file_get_contents() などのオールインワン ファイル関数に便利です。 データ ストリーム コンテンツが読み取られる前に追加のフィルターを適用する機会はありません。

ターゲットはパスの一部として次のパラメーターを使用します。 複合フィルター チェーンをパス上に指定できます。これらのパラメータの詳細な使用方法については、具体的な例を参照してください。

php://filterパラメータ
名前 説明
resource=a97e084a483a25ff536cf24038d08f2b このパラメータはオプションです。 1 つ以上のフィルター名をパイプ文字 (|) で区切って設定できます。
write=2c67c8a165d423872251bfd9adc101eb このパラメータはオプションです。 1 つ以上のフィルター名をパイプ文字 (|) で区切って設定できます。
9e177fbb2a5d8a88878b62022937adac read= または write= のプレフィックスが付いていないフィルタ リストは、必要に応じて読み取りチェーンまたは書き込みチェーンに適用されます。


オプション

allow_ url_fopen の最初まず第一に、allow_url_includephp://stdin、php://input、php://fd、php://memory、php://temp のみ php://stdout、php://stderr、php://output、php://fd、php://memory、php://temp へのみ追加を許可します同時読み取りと書き込みを許可しますstat()のサポートはありませんrmdir()はstream_select()のみをサポートします



更新ログ

カプセル化プロトコルの概要 (php://filterについては、フィルターされたラッパーを参照してください。)
属性
いいえ
php://input、php://stdin、php://memory、php://tempのみです。
の読み取りを許可します。
の書き込みを許可します。
php://stdout、php://stderr、php://output、php://fd、php://memory、およびphp://temp (writeに等しい)のみ
php://fd、php://memory、php://temp のみ。
php://memory と php://temp のみをサポートします。
いいえ
php://stdin、php://stdout、php://stderr、php://fdそしてphp://temp。
バージョン 説明
5.3.6 を追加しました。
5.1.0 が追加されました。
5.0.0 を追加しました。





例 #1 php://temp/maxmemory


このオプションのオプションでは、一時的な最大メモリ制限の使用を開始できます。ファイル。

<?php
// Set the limit to 5 MB.
$fiveMBs = 5 * 1024 * 1024;
$fp = fopen("php://temp/maxmemory:$fiveMBs", &#39;r+&#39;);

fputs($fp, "hello\n");

// Read what we have written.
rewind($fp);
echo stream_get_contents($fp);
?>
<code style="font-family:'Fira Mono', 'Source Code Pro', monospace;display:block;"><br>

Example #2 php://filter/resource=c86506dad4a21efc22295706e7823e6e


这个参数必须位于  的末尾,并且指向需要过滤筛选的数据流。


<?php
/* 这简单等同于:  
readfile("http://www.example.com");  
实际上没有指定过滤器 
*/readfile("php://filter/resource= 
?>

Example #3 php://filter/read=437118782181258620df8e241af00a1e


这个参数采用一个或以管道符 | 分隔的多个过滤器名称。


<?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"
);
?>
<span style="color:rgb(0,0,0);"><span style="color:rgb(0,0,187);"></span></span><br>


Example #4 php://filter/write=dd24e079f7aba037cec89235a5607d8a


这个参数采用一个或以管道符 | 分隔的多个过滤器名称。


<?php
/* 这会通过 rot13 过滤器筛选出字符 "Hello World"
  然后写入当前目录下的 example.txt */
file_put_contents
(
"php://filter/write=string.rot13/resource=example.txt"
,
"Hello World"
);
?>
<span style="color:rgb(0,0,0);"><span style="color:rgb(0,0,187);"></span></span><br>

例 #2 php://filter/resource=< ;フィルタリングされるデータ ストリーム>

このパラメータはフィルタリングする必要があるデータ ストリームの最後に配置され、それを指す必要があります。

rrreee

例 #3 php://filter/read=5ce81510a586b2f2719dab313c63d51d

🎜🎜このパラメーターは、パイプ文字で区切られた 1 つまたは複数のフィルター名を受け取ります。 。 🎜🎜🎜🎜🎜rrreee<span style="color:rgb(0,0,0); "><span style="color:rgb(0,0,187);"></span></span>🎜🎜🎜🎜🎜🎜例 #4 php://filter/write=🎜🎜🎜🎜🎜 このパラメーターには、パイプ文字で区切られた 1 つまたは複数のフィルター名を指定します。 🎜🎜🎜🎜🎜rrreee<span style="color:rgb(0,0,0); "><span style="color:rgb(0,0,187);"></span></span>🎜🎜🎜関連推奨事項: 🎜🎜🎜PHP の HTTP プロトコル ポスト リクエスト パラメーター、php プロトコル ポストRequest_PHP チュートリアル🎜🎜🎜🎜PHP の Http プロトコル ポスト リクエスト パラメーター、php プロトコル ポスト リクエスト🎜🎜🎜🎜php ポストの送信が表示される入力変数が 1000 を超えました🎜🎜

以上がphpの特殊なプロトコル、php://プロトコルの詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。