ホームページ >バックエンド開発 >PHPチュートリアル >PHPマスター| PHPでのストリームの理解
コアポイント
fseek()
にすることができます。各ストリームには、特定のプロトコルまたはエンコーディングを処理するためのラッパーがあります。 file://
です。これは、ファイルシステムにアクセスするたびに使用されます。その他のラッパーには、HTTP、Amazon S3、MS Excel、Googleストレージ、Dropbox、Twitterのラッパーが含まれます。 PHPストリームはPHPが提供するリソースであり、頻繁に透過的に使用しますが、非常に強力なツールになることもあります。彼らの力を活用する方法を学ぶことで、アプリケーションをより高いレベルに引き上げることができます。 PHPマニュアルには、ストリーミングの適切な説明があります。簡単に言えば、ストリームはストリーミング可能な動作を示すリソースオブジェクトです。つまり、線形に読み書きしたり、書かれたりすることができ、ストリーム内のどこでもfseek()
>できる場合があります。
各ストリームには、特定のプロトコルまたはエンコードを処理するために必要な追加のコードを含む実装ラッパーがあります。 PHPは、カスタムラッパーを簡単に作成および登録できる組み込みラッパーを提供します。コンテキストとフィルターを使用して、ラッパーの動作を変更または強化することもできます。
フローの基本
ストリームの参照形式は<scheme>://<target></target></scheme>
です。 <scheme></scheme>
はラッパーの名前であり、<target></target>
はラッパーの構文によって異なります。デフォルトのラッパーはfile://
です。つまり、ファイルシステムにアクセスするたびにストリームを使用します。たとえば、readfile('/path/to/somefile.txt')
またはreadfile('file:///path/to/somefile.txt')
を書き込み、同じ結果を得ることができます。代わりにreadfile('http://google.com/')
を使用する場合、PHPにHTTPストリームラッパーを使用するように指示します。前述のように、PHPはいくつかの組み込みラッパー、プロトコル、およびフィルターを提供します。マシンにどのラッパーが取り付けられているかを理解するには、使用できます。
<code class="language-php"><?php print_r(stream_get_transports()); print_r(stream_get_wrappers()); print_r(stream_get_filters()); ?></code>私のインストール出力は次のとおりです
<code class="language-php"><?php print_r(stream_get_transports()); print_r(stream_get_wrappers()); print_r(stream_get_filters()); ?></code>
良いツールのセットですね。さらに、Amazon S3、MS Excel、Google Storage、Dropbox、さらにはTwitterにサードパーティのストリームを作成または使用できます。
php:// wrapper
PHPには、言語のI/Oストリームにアクセスする独自のラッパーがあります。基本的なphp://stdin
、php://stdout
、およびphp://stderr
ラッパーがデフォルトのI/Oリソースをマッピングします。また、POSTリクエストの元の本文を備えた読み取り専用ストリームでもあります。これは、データペイロードをPOSTリクエスト本体内に配置するリモートサービスを扱う場合に非常に便利です。迅速なテストにカールを使用しましょう:php://input
<code>Array ( [0] => tcp [1] => udp [2] => unix [3] => udg [4] => ssl [5] => sslv3 [6] => sslv2 [7] => tls ) Array ( [0] => https [1] => ftps [2] => compress.zlib [3] => compress.bzip2 [4] => php [5] => file [6] => glob [7] => data [8] => http [9] => ftp [10] => zip [11] => phar ) Array ( [0] => zlib.* [1] => bzip2.* [2] => convert.iconv.* [3] => string.rot13 [4] => string.toupper [5] => string.tolower [6] => string.strip_tags [7] => convert.* [8] => consumed [9] => dechunk [10] => mcrypt.* [11] => mdecrypt.* )</code>PHPスクリプトに応じた
の結果は次のとおりです。
print_r($_POST)
<code class="language-bash">curl -d "Hello World" -d "foo=bar&name=John" http://localhost/dev/streams/php_input.php</code>配列からアクセスできないことに注意してください。ただし、代わりに
を使用する場合、$_POST
を取得します。
readfile('php://input')
<code class="language-php">Array ( [foo] => bar [name] => John )</code>および
ストリームラッパーを紹介します。名前が示すように、データは、それぞれ基礎となるシステムによって管理されているメモリまたは一時ファイルに保存されます。また、php://memory
やphp://temp
/php://filter
などの関数を使用して、ストリームを開くときにフィルターを適用するように設計されたメタラッパーreadfile()
もあります。 file_get_contents()
stream_get_contents()
<code>Hello World&foo=bar&name=John</code>フローコンテキスト
コンテキストは、ラッパーの動作を変更および強化できるストリーム固有のパラメーターまたはオプションのセットです。一般的な使用コンテキストは、HTTPラッパーを変更することです。これにより、単純なネットワーク操作でCurlの使用を避けることができます。
最初に、フォーマット
<code class="language-php"><?php // 写入编码数据 file_put_contents("php://filter/write=string.rot13/resource=file:///path/to/somefile.txt","Hello World"); // 读取数据并进行编码/解码 readfile("php://filter/read=string.toupper|string.rot13/resource=http://www.google.com"); ?></code>の配列であるオプションの配列を定義します(利用可能なコンテキストオプションは、特定のラッパーによって異なります)。次に、デフォルトのコンテキストを返し、適用するオプションのオプションの配列を受け入れる
を呼び出します。 $array['wrapper']['option_name']
ステートメントは、これらの設定を使用してコンテンツを取得します。この例では、コンテンツはリクエストの本文で送信されるため、リモートスクリプトはstream_context_get_default()
を使用して読み取ります。 readfile()
を使用してヘッダーにアクセスして取得できます。
php://input
apache_request_headers()
デフォルトのコンテキストオプションを変更しましたが、単独で使用するための代替コンテキストを作成することもできます。
<code class="language-php"><?php $opts = array( 'http' => array( 'method' => "POST", 'header' => "Auth: SecretAuthToken\r\n" . "Content-type: application/x-www-form-urlencoded\r\n" . "Content-length: " . strlen("Hello World"), 'content' => 'Hello World' ) ); $default = stream_context_get_default($opts); readfile('http://localhost/dev/streams/php_input.php'); ?></code>結論
<code class="language-php">Array ( [Host] => localhost [Auth] => SecretAuthToken [Content-type] => application/x-www-form-urlencoded [Content-length] => 11 )</code>
現実の世界で流れの力をどのように使用しますか?他にどこに行くことができますか?ご覧のとおり、Streamsはファイルシステム関連の機能を共有しているため、HerokuやAppFogなどのHerokuまたはAppFogを使用したPAASプロビジョニングの最初の使用は、最初に使用されます。ほとんど努力しても、標準のホスティングサービスからこれらのクラウドサービスにアプリケーションを移植し、利点を享受できます。さらに、後続の投稿に表示します。カスタムファイル形式とエンコーディングを実装するアプリケーション用のカスタムラッパーとフィルターを構築できます。
(スペースの制限のため、FAQの部分はここで省略されています。)
以上がPHPマスター| PHPでのストリームの理解の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。