この記事では主に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= のプレフィックスが付いていないフィルタ リストは、必要に応じて読み取りチェーンまたは書き込みチェーンに適用されます。 |
オプション
カプセル化プロトコルの概要 (php://filterについては、フィルターされたラッパーを参照してください。)
属性 |
|
allow_ url_fopen の最初 いいえ |
|
まず第一に、allow_url_include
php://input、php://stdin、php://memory、php://tempのみです。 |
|
php://stdin、php://input、php://fd、php://memory、php://temp のみ
の読み取りを許可します。 |
|
php://stdout、php://stderr、php://output、php://fd、php://memory、php://temp へのみ
の書き込みを許可します。 |
|
追加を許可します
php://stdout、php://stderr、php://output、php://fd、php://memory、およびphp://temp (writeに等しい)のみ | |
同時読み取りと書き込みを許可します
php://fd、php://memory、php://temp のみ。 |
|
stat()
php://memory と php://temp のみをサポートします。 |
|
のサポートはありませんrmdir()
いいえ |
|
はstream_select()のみをサポートします
php://stdin、php://stdout、php://stderr、php://fdそしてphp://temp。 |
|
更新ログ
例
例 #1 php://temp/maxmemory
このオプションのオプションでは、一時的な最大メモリ制限の使用を開始できます。ファイル。
<?php
// Set the limit to 5 MB.
$fiveMBs = 5 * 1024 * 1024;
$fp = fopen("php://temp/maxmemory:$fiveMBs", 'r+');
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=<待过滤的数据流>
这个参数必须位于 的末尾,并且指向需要过滤筛选的数据流。
<?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 サイトの他の関連記事を参照してください。