31
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

updated at

【PHP】ストリームってなに?

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をどうして作っているか?」

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
31
Help us understand the problem. What are the problem?