ホームページ >バックエンド開発 >PHPチュートリアル >PHP_PHP チュートリアルでのストリームの簡単な分析
この記事では、PHPにおけるストリームの簡単な分析を中心に、ストリームの概要、ストリームの基礎知識、php://ラッパー、ストリームコンテキストについて説明します。 ) やその他のコンテンツは、必要な友達が参照できます
概要
ストリームは PHP 4.3 で導入された機能で、主にファイル、ソケット、およびその他の同様のリソースの作業方法を統一するために使用されます。 PHP 4.3 は長い間存在していましたが、多くのプログラマーは PHP でストリームを正しく使用できないようです (もちろん私もその中にあります)。 php://input などのいくつかのプログラムでストリームの使用に遭遇したことがありますが、今日はこの部分の知識を整理する機会がありませんでした。
ストリームはPHPが提供するリソースであり、私たちも透過的に使用することができ、ストリームは非常に強力なツールです。プログラム内でストリームを適切に使用すると、プログラムを新たなレベルに引き上げることができます。
PHPマニュアルにおける対流の説明は以下の通りです:
コードをコピーします。コードは次のとおりです:
ストリームは、ファイル、ネットワーク、データ圧縮、および一連の共通の機能と用途を共有するその他の操作を一般化する方法として PHP 4.3.0 で導入されました。最も単純な定義では、ストリームはストリーミング可能な動作を示すリソース オブジェクトです。つまり、線形的な方法で読み書きすることができ、ストリーム内の任意の場所に fseek() できる場合があります。
各ストリームはラッパーを実装しており、これには特別なプロトコルとエンコーディングを処理するための追加コードが含まれています。 PHP にはいくつかの組み込みラッパーが用意されており、カスタム ラッパーを簡単に作成して登録することもできます。コンテキストやフィルターを使用してラッパーを変更および強化することもできます。
ストリーミングの基礎知識
PHPにおけるフローの形式は、
デフォルトのラッパーは file:// です。これは、ファイル システムにアクセスするたびにストリームが使用されることを意味します。たとえば、ファイルを読み取るには、readfile('/path/to/somefile.txt') と readfile('file:///path/to/somefile.txt') の 2 つのメソッドを使用できます。ファイルを読み取ると、同じ結果が得られます。
前に述べたように、PHP はいくつかの組み込みラッパー、プロトコル、フィルターを提供します。マシンにどのラッパーがインストールされているかを確認するには、次の関数を使用できます:
コードをコピーします。コードは次のとおりです:
var_dump(stream_get_transports());
var_dump(stream_get_wrappers());
var_dump(stream_get_filters());
?>
私のローカル環境の出力は次のとおりです:
コードをコピーします。コードは次のとおりです:
配列(サイズ=8)
0 => 文字列 'tcp' (長さ=3)
1 => 文字列 'udp' (長さ=3)
2 => 文字列 'unix' (長さ=4)
3 => 文字列 'udg' (長さ=3)
4 => 文字列 'ssl' (長さ=3)
5 => 文字列 'sslv3' (長さ=5)
6 => 文字列 'sslv2' (長さ=5)
7 => 文字列 'tls' (length=3)
配列(サイズ=12)
0 => 文字列 'https' (長さ=5)
1 => 文字列 'ftps' (長さ=4)
2 => 文字列 'compress.zlib' (length=13)
3 => 文字列 'compress.bzip2' (length=14)
4 => 文字列 'php' (length=3)
5 => 文字列「ファイル」(長さ=4)
6 => 文字列 'glob' (長さ=4)
7 => 文字列 'data' (length=4)
8 => 文字列 'http' (長さ=4)
9 => 文字列 'ftp' (長さ=3)
10 => 文字列 'phar' (長さ=4)
11 => 文字列 'zip' (長さ=3)
配列(サイズ=12)
0 => 文字列 'zlib.*' (長さ=6)
1 => 文字列 'bzip2.*' (長さ=7)
2 => 文字列 'convert.iconv.*' (length=15)
3 => 文字列 'string.rot13' (長さ=12)
4 => 文字列 'string.toupper' (length=14)
5 => 文字列 'string.to lower' (length=14)
6 => 文字列 'string.strip_tags' (length=17)
7 => 文字列 'convert.*' (長さ=9)
8 => 文字列 'consumed' (length=8)
9 => 文字列 'dechunk' (length=7)
10 => 文字列 'mcrypt.*' (長さ=8)
11 => 文字列 'mdecrypt.*' (length=10)
さらに、サードパーティのストリームをカスタマイズまたは使用することもできます。
php://wrapper
PHP には、入出力 (I/O) ストリームにアクセスするための独自のラッパーがあります。 PHP には、デフォルトの I/O リソースに対応する基本的な php://stdin、php://stdout、php://stderr ラッパーがあります。読み取り専用ストリームである php://input ストリームもあり、ストリームのコンテンツは投稿によって要求されたデータです。このストリームは、ポスト リクエストの本文にデータを入れてリモート サービスをリクエストする場合に特に便利です。
php://input が最も一般的に使用されるストリームであるため、いくつかの知識ポイントを以下に示します:
コードをコピーします。コードは次のとおりです:
1.php://inputは未処理のPOSTデータを読み込むことができます。 $HTTP_RAW_POST_DATA と比較すると、メモリへの負担が少なく、特別な php.ini 設定は必要ありません。 php://input は enctype=multipart/form-data には使用できません
2. Content-Type が application/x-www-form-urlencoded で、送信メソッドが POST メソッドの場合にのみ、$_POST データと php://input データが「一致」します (引用符付き、つまり、形式は一貫していませんが、コンテンツは一貫しています)。他の場合には、それらは矛盾します
3.php://inputではGETデータを読み込めません。これは、_GET データが http リクエストのボディ部分ではなく、http リクエスト ヘッダー (header) の PATH フィールドに query_path として書き込まれているためです。
ストリームコンテキスト
この部分はプログラミングではほとんど見たことがないので、調べるのが難しいので、興味があればBaiduで検索してみてください。
概要
日常的なプログラミングではストリームはあまり使用されません。xml-rpc を使用する場合、サーバー側は主に PHP 入力ストリームの入力を通じてクライアントデータを取得します。ハッカーが Web サイトに侵入するときに、コンテンツのこの部分を使用することもあります。