PHPのストリーム
ストリームは、 ファイル、ネットワーク、データ圧縮などに関する、 共通した一連の関数群と利用法を持つ操作の一般化の手法です。
正直よくわからないのでYYPHPで質問させていただきました。
PHPのストリームと一般的なストリームは若干異なる
PHPにはストリームという機能がある。
ストリームのアルゴリズムとは少し違う話。
共通していること
データの総量が確定していないものを扱う処理をストリーム(ストリーム処理)と言われることが多い。
大量のデータを水が小川を流れるように少しずつ処理をする。
PHPのストリーム
入出力を扱う機能。
CSVを1行ずつ読み込んで、DBに保存したりするイメージ
・ストリーム関数
例:fread, stream_get_contents
〇〇バイトずつ読み込む、というような処理。
・ストリーム処理じゃない関数
例:file_get_contents
全データを取得してくる
何十メガバイトもあるような大きいファイルを読み込むとPHPのメモリが足りなくなってエラーが起きたりする。
ストリームフィルタ
フィルタ は、ストリームから読み込まれたり、 あるいは、ストリームから書き込まれたするデータに対して何らかの操作を行う、 最終段階にあるコードです。 PHP スクリプトの内部で、 stream_filter_register() を使って、 あるいは拡張モジュールの内部で ストリームの作成 に示された関連する API を使って、カスタムフィルタを作成することができます。 現在登録されているフィルタの一覧を取得するには、 stream_get_filters() をお使いください。
ストリームで入出力するデータに対して操作ができるっぽい。
フィルターっていうくらいなので、流れてくるデータに対してフィルター(コーヒーのフィルターみたいな)をかけるイメージで良さそう。
利用できるフィルタのリスト
PHPのストリームフィルタでCSV読み込み
ストリームコンテキスト
コンテキスト は、ストリームの挙動を変えたり、 拡張したりすることのできる パラメータ と ラッパー固有の オプション の集合です。
ストリームフィルターの振る舞いを変える設定などを渡せるようになる。
https://www.php.net/manual/ja/context.php
例:file_get_contensの第3引数
file_get_contensの内部の振る舞いを変える。
※file_get_contensはPHPの関数としてはストリーム処理ではないが、file_get_contensの内部(C言語レベル)ではストリーム処理を行なっている(多分)。
その振る舞いの設定を変えるもの。
ラッパー
PHP には多くの組み込みラッパーが用意されています。さまざまな URL 風のプロトコルによって、 fopen() や copy()、 file_exists() そして filesize() といったファイルシステム関数で使用することができます。 これらのラッパーだけでなく、 stream_wrapper_register() 関数でラッパーを自作することもできます。
php://
://の前の部分、自作することも可能
ストリームラッパーとして登録するクラスの例
参考
YYPHP#87「PhpStorm有効活用術」「自社サービス開発と受託開発の違いとは?」「ポートフォリオにどんな内容が必要?」
YYPHP #88「どんなバリデーションをどこでやる?」「エンジニアの転職活動ってどんなの?」「もっと快適な開発環境」「php-javaをどうして作っているか?」