ホームページ  >  記事  >  バックエンド開発  >  PHP におけるストリームの簡単な分析、phpstreams_PHP チュートリアルの簡単な分析

PHP におけるストリームの簡単な分析、phpstreams_PHP チュートリアルの簡単な分析

WBOY
WBOYオリジナル
2016-07-13 09:47:23809ブラウズ

PHP におけるストリームの簡単な分析、phpstream の簡単な分析

概要

ストリームは PHP 4.3 で導入された機能で、主にファイル、ソケット、およびその他の同様のリソースの作業メソッドを統合するために使用されます。 PHP 4.3 は長い間存在していましたが、多くのプログラマーは PHP でストリームを正しく使用できないようです (もちろん私もその中にあります)。 php://input などのいくつかのプログラムでストリームの使用に遭遇したことがありますが、今日はこの部分の知識を整理する機会がありませんでした。

ストリームは PHP によって提供されるリソースであり、透過的に使用できます。ストリームは非常に強力なツールです。プログラム内でストリームを適切に使用すると、プログラムを新たなレベルに引き上げることができます。

対流はPHPマニュアルでは次のように説明されています:
コードをコピーします コードは次のとおりです:
ストリームは、ファイル、ネットワーク、データ圧縮、および一連の共通の機能と用途を共有するその他の操作を一般化する方法として PHP 4.3.0 で導入されました。最も単純な定義では、ストリームはストリーミング可能な動作を示すリソース オブジェクトです。つまり、線形的な方法で読み書きすることができ、ストリーム内の任意の場所に fseek() できる場合があります。

各ストリームはラッパーを実装しており、これには特別なプロトコルとエンコーディングを処理するための追加コードが含まれています。 PHP にはいくつかの組み込みラッパーが用意されており、カスタム ラッパーを簡単に作成して登録することもできます。コンテキストやフィルターを使用してラッパーを変更および強化することもできます。

ストリーミングの基本

PHP のストリームの形式は、:// です。 はラッパーの名前であり、 の内容は異なるラッパー構文に依存します。
デフォルトのラッパーは file:// です。これは、ファイル システムにアクセスするたびにストリームが使用されることを意味します。たとえば、次の 2 つのメソッドを使用してファイルを読み取ることができます: 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' (長さ=3)
配列(サイズ=12)
0 => 文字列 'https' (長さ=5)
1 => 文字列 'ftps' (長さ=4)
2 => 文字列 'compress.zlib' (長さ=13)
3 => 文字列 'compress.bzip2' (長さ=14)
4 => 文字列 'php' (長さ=3)
5 => 文字列「ファイル」(長さ=4)
6 => 文字列 'glob' (長さ=4)
7 => 文字列「データ」(長さ=4)
8 => 文字列 'http' (長さ=4)
9 => 文字列 'ftp' (長さ=3)
10 => 文字列 'phar' (長さ=4)
11 => 文字列「zip」(長さ=3)
配列(サイズ=12)
0 => 文字列 'zlib.*' (長さ=6)
1 => 文字列 'bzip2.*' (長さ=7)
2 => 文字列 'convert.iconv.*' (長さ=15)
3 => 文字列 'string.rot13' (長さ=12)
4 => 文字列 'string.toupper' (長さ=14)
5 => 文字列 'string.to lower' (長さ=14)
6 => 文字列 'string.strip_tags' (長さ=17)
7 => 文字列 'convert.*' (長さ=9)
8 => 文字列「消費」(長さ=8)
9 => 文字列「デチャンク」(長さ=7)
10 => 文字列 'mcrypt.*' (長さ=8)
11 => 文字列 'mdecrypt.*' (長さ=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 サイトに侵入するときに、コンテンツのこの部分を使用することもあります。

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/1026058.html技術記事 PHP におけるストリームの簡単な分析、phpstream の簡単な分析 概要 ストリームは PHP 4.3 で導入された機能で、主にファイル、ソケット、およびその他の同様のリソースの作業方法を統一するために使用されます。 ...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。