この記事では、PHP Streams (ストリーム) の詳細な導入と使用法を主に紹介します。PHP Streams は、一般の開発者が使用することはほとんどないかもしれません。ファイル、ネットワーク、データ圧縮、その他のファイル操作の統合に使用され、これらのファイル操作に必要な共通関数インターフェイスのセットを提供します
。PHP Streams は、通常の開発者がほとんど使用しない可能性がある組み込みのコア操作であり、ファイル、ネットワーク、データ圧縮、およびその他のファイルに似た操作を統合するために使用され、これらのファイルに似た操作に一連の共通関数インターフェイスを提供します。オペレーション。
ストリームはストリーミング動作を持つリソースオブジェクトであり、各ストリームオブジェクトはラッパークラスを持ちます。ストリームは
PHP にデフォルトで備わっている組み込みのパッケージング クラスを見てみましょう:
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
print_r(stream_get_wrappers()); /* 配列 ( [0] => php [1] => ファイル [2] => グロブ [3] => データ [4] => http [5] => ftp [6] => zip [7] => compress.zlib [8] => https [9] => ftps [10] => ファー ) */ |
PHP でサポートされているプロトコルとラッパー クラスについては、PHP マニュアルを参照してください。
file_get_contents() を使用してデータを取得する次のコードを見てください。
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
/* /home/bar からローカル ファイルを読み取ります */ $localfile = file_get_contents ( "/home/bar/foo.txt" );
/* 上記と同じですが、FILE スキームに明示的に名前を付けます */ $localfile = file_get_contents ( "file:///home/bar/foo.txt" );
/* HTTP を使用して www.example.com からリモート ファイルを読み取ります */ $httpfile = file_get_contents ( "http://www.example.com/foo.txt" );
/* HTTPS を使用して www.example.com からリモート ファイルを読み取ります */ $httpsfile = file_get_contents ( "https://www.example.com/foo.txt" );
/* FTP を使用して ftp.example.com からリモート ファイルを読み取ります */ $ftpfile = file_get_contents ( "ftp://user:pass@ftp.example.com/foo.txt" );
/* FTPS を使用して ftp.example.com からリモート ファイルを読み取ります */ $ftpsfile = file_get_contents ( "ftps://user:pass@ftp.example.com/foo.txt" );
|
1 2 3 4 5 6 7 8 |
$opts = 配列( 'http'=>配列( 'メソッド'=>"GET", 'タイムアウト'=>60, ) ); $context = stream_context_create($opts); $html =file_get_contents('http://www.jb51.net', false, $context); |
(2) フィルターについては、まず PHP に組み込まれているフィルターを見てみましょう:
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
print_r(stream_get_filters()); /* 配列 ( [0] => Convert.iconv.* [1] => mcrypt.* [2] => mdecrypt.* [3] => 文字列.rot13 [4] => string.toupper [5] => string.to lower [6] => string.strip_tags [7] => 変換.* [8] => 消費されました [9] => デチャンク [10] => zlib.* ) */ |
カスタム フィルターは、次のように stream_filter_register() および組み込みの php_user_filter を使用して作成できます。
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
|
/* フィルター クラスを定義します */ class strtoupper_filter extends php_user_filter { 関数フィルター ( $in 、 $out 、 & $consumed 、 $closed ) { while ( $bucket = stream_bucket_make_writeable ( $in )) { $bucket -> データ = strtoupper ( $bucket -> データ ); $消費 += $バケット -> stream_bucket_append ( $out , $bucket ); } PSFS_PASS_ON を返す ; } }
/* PHP でフィルターを登録します */ stream_filter_register ( "strtoupper" , "strtoupper_filter" ) or die( "フィルターの登録に失敗しました" );
$fp = fopen ( "foo-bar.txt" , "w" );
/* 登録したフィルターを開いたばかりのストリームにアタッチします */ stream_filter_append ( $fp , "strtoupper" );
fwrite ( $fp , "Line1n" ); fwrite ( $fp , "Word - 2n" ); fwrite ( $fp , "123n と同じくらい簡単" );
fclose ( $fp );
readfile ( "foo-bar.txt" ); /* 結果は以下の通りです: LINE1 単語 - 2 123 個で簡単 */
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
|
stream_bucket_append 関数: キューにデータを追加します stream_bucket_make_writeable 関数: 操作キューからデータ オブジェクトを返します stream_bucket_new 関数: 現在のキューの新しいデータを作成します stream_bucket_prepend 関数: キューへのデータを準備します stream_context_create 関数: データ フロー コンテキストを作成します stream_context_get_default 関数: デフォルトのデータ フロー コンテキストを取得します stream_context_get_options 関数: データストリームの設定を取得します stream_context_set_option 関数: データストリーム、データパケット、またはコンテキストを設定します stream_context_set_params 関数: データストリーム、データパケット、またはコンテキストのパラメータを設定します stream_copy_to_stream 関数: データ ストリーム間でコピー stream_filter_append 関数: データ ストリームにフィルターを追加します stream_filter_prepend 関数: データストリームの準備にフィルターを追加します stream_filter_register関数: データストリームフィルターを登録し、PHPクラスとして実行します stream_filter_remove 関数: データ ストリームからフィルターを削除します stream_get_contents 関数: データ ストリーム内の残りのデータを文字列に読み取ります stream_get_filters 関数: 登録されたデータ ストリーム フィルターのリストを返します stream_get_line 関数: 指定された区切り文字に従ってデータ ストリーム リソースから行を取得します stream_get_meta_data 関数: カプセル化されたプロトコル ファイル ポインターからヘッダー/メタデータを取得します stream_get_transports 関数: 登録されたソケットトランスポートリストを返します stream_get_wrappers 関数: 登録されたデータ ストリーム リストを返します stream_register_wrapper関数: PHPクラスで実装されたURLラッピングプロトコルを登録します stream_select 関数: データ ストリーム配列を受信し、そのステータスが変化するのを待ちます stream_set_blocking 関数: データ ストリームをブロッキング状態または非ブロッキング状態に設定します stream_set_timeout 関数: データストリームのタイムアウトを設定します stream_set_write_buffer 関数: データストリームのバッファーを設定します stream_socket_accept 関数: stream_socket_server() 関数によって作成されたソケット接続を受け入れます stream_socket_client 関数: ネットワークまたは UNIX ホストのソケット接続を開きます stream_socket_enable_crypto 関数: 接続されたソケットのデータ暗号化をオンまたはオフにします stream_socket_get_name 関数: ローカルまたはネットワークソケットの名前を取得します stream_socket_pair 関数: 2 つの未区別のソケット データ ストリーム接続を作成します stream_socket_recvfrom 関数: 接続されているかどうかに関係なく、Socket からデータを取得します stream_socket_sendto 関数: 接続されているかどうかに関係なく、Socket にデータを送信します stream_socket_server 関数: ネットワークまたは UNIX ソケットサーバーを作成します stream_wrapper_restore 関数: 以前にログアウトしたデータ パッケージを復元します stream_wrapper_unregister 関数: URL アドレス パッケージの登録を解除します
|