この記事では主に、PHP Streams (ストリーム) の詳細な紹介と使用方法を紹介します。PHP Streams は組み込みのコア操作であり、一般の開発者が使用することはほとんどありません。これは、ファイル、ネットワーク、データ圧縮、およびその他のファイルに似た操作を統合するために使用され、これらのファイルに似た操作に一連の共通関数インターフェイスを提供します。お役に立てれば幸いです。
PHP ストリームは、通常の開発者がほとんど使用しない組み込みのコア操作であり、ファイル、ネットワーク、データ圧縮などのファイルのような操作を統合するために使用され、これらのファイルに一連の共通関数インターフェイスを提供します。 - のような操作。
ストリームはストリーミング動作を持つリソースオブジェクトであり、各ストリームオブジェクトにはラッパークラスがあります。ストリームは、
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 サイトの他の関連記事を参照してください。