ホームページ  >  記事  >  バックエンド開発  >  PHP のストリームの基礎知識

PHP のストリームの基礎知識

墨辰丷
墨辰丷オリジナル
2018-06-09 10:17:001455ブラウズ

この記事では主に PHP ストリームの基礎知識を紹介しますので、興味のある方は参考にしていただければ幸いです。

概要

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

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

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

ストリームの基礎知識

PHP におけるストリームの形式は、e8ecf1fabecb2bbf3952eba1f0f8a7ec://b4bef09dd2761803871f1d83e55d08b2 です。 e8ecf1fabecb2bbf3952eba1f0f8a7ec はラッパーの名前であり、b4bef09dd2761803871f1d83e55d08b2 の内容は異なるラッパー構文に依存します。
デフォルトのラッパーは file:// です。これは、ファイル システムにアクセスするたびにストリームが使用されることを意味します。たとえば、次の 2 つのメソッドを使用してファイルを読み取ることができます: readfile('/path/to/somefile.txt') と readfile('file:///path/to/somefile.txt') この 2 つのメソッドを使用します。ファイルを読み取ると、同じ結果が得られます。

前に述べたように、PHP にはいくつかの組み込みラッパー、プロトコル、フィルターが用意されています。マシンにどのラッパーがインストールされているかを確認するには、次の関数を使用できます:

コードは次のとおりです:

<?php
    var_dump(stream_get_transports());
    var_dump(stream_get_wrappers());
    var_dump(stream_get_filters());
?>

私のローカル環境の出力内容は次のとおりです:

コードは次のとおりです:

array (size=8)
  0 => string &#39;tcp&#39; (length=3)
  1 => string &#39;udp&#39; (length=3)
  2 => string &#39;unix&#39; (length=4)
  3 => string &#39;udg&#39; (length=3)
  4 => string &#39;ssl&#39; (length=3)
  5 => string &#39;sslv3&#39; (length=5)
  6 => string &#39;sslv2&#39; (length=5)
  7 => string &#39;tls&#39; (length=3)
array (size=12)
  0 => string &#39;https&#39; (length=5)
  1 => string &#39;ftps&#39; (length=4)
  2 => string &#39;compress.zlib&#39; (length=13)
  3 => string &#39;compress.bzip2&#39; (length=14)
  4 => string &#39;php&#39; (length=3)
  5 => string &#39;file&#39; (length=4)
  6 => string &#39;glob&#39; (length=4)
  7 => string &#39;data&#39; (length=4)
  8 => string &#39;http&#39; (length=4)
  9 => string &#39;ftp&#39; (length=3)
  10 => string &#39;phar&#39; (length=4)
  11 => string &#39;zip&#39; (length=3)
array (size=12)
  0 => string &#39;zlib.*&#39; (length=6)
  1 => string &#39;bzip2.*&#39; (length=7)
  2 => string &#39;convert.iconv.*&#39; (length=15)
  3 => string &#39;string.rot13&#39; (length=12)
  4 => string &#39;string.toupper&#39; (length=14)
  5 => string &#39;string.tolower&#39; (length=14)
  6 => string &#39;string.strip_tags&#39; (length=17)
  7 => string &#39;convert.*&#39; (length=9)
  8 => string &#39;consumed&#39; (length=8)
  9 => string &#39;dechunk&#39; (length=7)
  10 => string &#39;mcrypt.*&#39; (length=8)
  11 => string &#39;mdecrypt.*&#39; (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 設定は必要ありません。 enctype=multipart/form-data
2 には php://input は使用できません。Content-Type が application/x-www-form-urlencoded で、送信メソッドが POST メソッドである場合のみ、$_POST データが使用されます。 php:/ と同じです。 /入力データは「一貫性」があります (形式が一貫性がなく、内容が一貫していることを示す引用符付き)。その他の場合は、一貫性がありません。
3.php://input は GET データを読み取ることができません。これは、_GET データが http リクエストのボディ部分ではなく、http リクエスト ヘッダー (header) の PATH フィールドに query_path として書き込まれているためです。

ストリーム コンテキスト

コンテンツのこの部分はプログラミングではほとんど見たことがないので、私にとっては調べるのが難しいです。興味があれば調べてください。百度それは自分で。

概要

ストリームは日常のプログラミングではあまり使用されません。xml-rpc を使用する場合、サーバー側は主に php 入力ストリーム入力を通じてクライアント データを取得します。よくあるシナリオ。ハッカーが Web サイトに侵入するときに、コンテンツのこの部分を使用することもあります。

関連する推奨事項:

Snoopy クラスを使用して HTML ファイルを解析する方法

ファイル操作のための php文字列暗号化方式

php文字列操作方式

以上がPHP のストリームの基礎知識の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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