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

墨辰丷
リリース: 2023-03-25 19:18:01
オリジナル
2605 人が閲覧しました

この記事では主に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=<フィルタリングされるデータストリーム>このパラメータは必須です。フィルタリングするデータ ストリームを指定します。
read=<チェーンフィルタリストの読み取り> このパラメータはオプションです。 1 つ以上のフィルター名をパイプ文字 (|) で区切って設定できます。
write=<チェーンフィルタリストの書き込み> このパラメータはオプションです。 1 つ以上のフィルター名をパイプ文字 (|) で区切って設定できます。
<両方のチェーンのフィルタ リスト> 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:&#39;Fira Mono&#39;, &#39;Source Code Pro&#39;, monospace;display:block;"><br/>

Example #2 php://filter/resource=<待过滤的数据流>


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


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

Example #3 php://filter/read=<读链需要应用的过滤器列表>


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


<?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=<写链需要应用的过滤器列表>


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


<?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=<チェーンの読み取り時に適用する必要があるフィルターのリスト>

🎜🎜このパラメーターは、パイプ文字で区切られた 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 サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート