ホームページ  >  記事  >  バックエンド開発  >  PHP Streamsストリームの詳しい説明

PHP Streamsストリームの詳しい説明

*文
*文オリジナル
2017-12-26 14:47:592197ブラウズ

この記事では主に、PHP Streams (ストリーム) の詳細な紹介と使用方法を紹介します。PHP Streams は組み込みのコア操作であり、一般の開発者が使用することはほとんどありません。これは、ファイル、ネットワーク、データ圧縮、およびその他のファイルに似た操作を統合するために使用され、これらのファイルに似た操作に一連の共通関数インターフェイスを提供します。お役に立てれば幸いです。

PHP ストリームは、通常の開発者がほとんど使用しない組み込みのコア操作であり、ファイル、ネットワーク、データ圧縮などのファイルのような操作を統合するために使用され、これらのファイルに一連の共通関数インターフェイスを提供します。 - のような操作。

ストリームはストリーミング動作を持つリソースオブジェクトであり、各ストリームオブジェクトにはラッパークラスがあります。ストリームは、e8ecf1fabecb2bbf3952eba1f0f8a7ec://b4bef09dd2761803871f1d83e55d08b2 を通じて参照できます。このうち、e8ecf1fabecb2bbf3952eba1f0f8a7ec はパッケージング クラスの名前であり、b4bef09dd2761803871f1d83e55d08b2 の内容はパッケージング クラスの構文によって指定されます。
PHP にデフォルトで備わっている組み込みのパッケージング クラスを見てみましょう:


print_r(stream_get_wrappers());
/*
Array
(
  [0] => php
  [1] => file
  [2] => glob
  [3] => data
  [4] => http
  [5] => ftp
  [6] => zip
  [7] => compress.zlib
  [8] => https
  [9] => ftps
  [10] => phar
)
*/


PHP マニュアルで PHP でサポートされているプロトコルとパッケージング クラスを見てください。
file_get_contents() を使用してデータを取得する次のコードを見てください:


/* Read local file from /home/bar */
 $localfile = file_get_contents ( "/home/bar/foo.txt" );
 
 /* Identical to above, explicitly naming FILE scheme */
 $localfile = file_get_contents ( "file:///home/bar/foo.txt" );
 
 /* Read remote file from www.example.com using HTTP */
 $httpfile  = file_get_contents ( "http://www.example.com/foo.txt" );
 
 /* Read remote file from www.example.com using HTTPS */
 $httpsfile = file_get_contents ( "https://www.example.com/foo.txt" );
 
 /* Read remote file from ftp.example.com using FTP */
 $ftpfile  = file_get_contents ( "ftp://user:pass@ftp.example.com/foo.txt" );
 
 /* Read remote file from ftp.example.com using FTPS */
 $ftpsfile  = file_get_contents ( "ftps://user:pass@ftp.example.com/foo.txt" );


実際には、readfile('/path/to/somefile.txt') または readfile('file:///path /to/ somefile.txt')、これら 2 つのメソッドは同等です。 PHP のデフォルトのパッケージング クラスは file:// であるためです。

マニュアルには、stream_register_wrapper() を通じて独自のラッパーを登録できることが明確に記載されています。マニュアルの例を確認してください。
OK、ここで PHP:// について簡単に説明します。PHP:// は、PHP が IO ストリームを処理するために使用するラッパー クラスです (ここをクリックすると例が表示されます)。より強力な入出力ストリームには、PHP://:

php://stdin を介してアクセスできます。cli がスクリプトを実行するときにキーボード入力を取得するために使用されるなど、PHP プロセスの対応する入力ストリームにアクセスします。
php://stdout: PHP プロセスの対応する出力ストリームにアクセスします。
php://stderr: PHP プロセスの対応するエラー出力にアクセスします。
php://input: 要求された生データにアクセスする読み取り専用ストリーム。
php://output: 書き込み専用のデータ ストリーム。print や echo と同じ方法で出力領域に書き込まれます。
php://fd: 指定されたファイル記述子への直接アクセスを許可します。例 php://fd/3 はファイル記述子 3 を指します。
php://memory: 一時データの読み取りと書き込みを許可します。 データをメモリに保存します。
php://temp: 上記と同様に、メモリが事前に定義された制限 (デフォルトは 2MB) に達すると、一時ファイルに保存されます。
php://filter: フィルター。

PHP は、コンテキストとフィルターを通じてパッケージ化クラスを変更および拡張することもできます。
(1) コンテキストに関しては、たとえば、PHP は stream_context_create() を使用してファイルを取得するためのタイムアウトを設定します。


$opts = array(
  'http'=>array(
    'method'=>"GET",
    'timeout'=>60,
  )
);
$context = stream_context_create($opts);
$html =file_get_contents('http://www.jb51.net', false, $context);


(2) フィルターについては、次のコードを見てみましょう。 PHP ファースト 組み込みフィルターとは:


print_r(stream_get_filters());
/*
Array
(
  [0] => convert.iconv.*
  [1] => mcrypt.*
  [2] => mdecrypt.*
  [3] => string.rot13
  [4] => string.toupper
  [5] => string.tolower
  [6] => string.strip_tags
  [7] => convert.*
  [8] => consumed
  [9] => dechunk
  [10] => zlib.*
)
*/



次のように、stream_filter_register() と組み込みの php_user_filter を使用してカスタム フィルターを作成できます。

PHP 中間ストリームを提供します 関数リストは次のとおりです:


/* Define our filter class */
class strtoupper_filter extends php_user_filter {
  function filter ( $in , $out , & $consumed , $closing )
  {
    while ( $bucket = stream_bucket_make_writeable ( $in )) {
      $bucket -> data = strtoupper ( $bucket -> data );
      $consumed += $bucket -> datalen ;
      stream_bucket_append ( $out , $bucket );
    }
    return PSFS_PASS_ON ;
  }
}
 
/* Register our filter with PHP */
stream_filter_register ( "strtoupper" , "strtoupper_filter" )
or die( "Failed to register filter" );
 
$fp = fopen ( "foo-bar.txt" , "w" );
 
/* Attach the registered filter to the stream just opened */
stream_filter_append ( $fp , "strtoupper" );
 
fwrite ( $fp , "Line1\n" );
fwrite ( $fp , "Word - 2\n" );
fwrite ( $fp , "Easy As 123\n" );
 
fclose ( $fp );
 
 
readfile ( "foo-bar.txt" );
/*
结果如下:
LINE1
WORD - 2
EASY AS 123
*/


関連する推奨事項:


php ファイルの分割と結合 (再開可能なアップロード)

nginx を使用して構築+nginx- rtmp-module+ffmpeg ストリーミング メディア サーバーのメモ (5)

Xiaowan ストリーミング メディアの再生 - HLS ストリーミング メディア オンデマンド システム

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

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