PHPの文脈でいうストリームは、ファイル、ネットワーク、データ圧縮などでデータ総量が確定していないものを少しづつ処理して操作を行うこと。

fgetやfread、stream_get_contensなどはストリーム関数で、file_get_contentsなどはストリーム関数ではない。
file_get_contentsは大きいファイルの場合は、PHPのメモリが足りなくなってエラーが発生する可能性がある(ただしfile_get_contents関数は内部的にはストリーム処理を行っているため、第3引数に後述するストリームコンテキストを渡すことができる)。

ストリームを使う場合、下記の3つの概念を抑えておく必要がある。

ストリームフィルター

ストリームで入出力するデータに対して、フィルターを適用することで特定の操作を行うことができる。

以下、フィルターの挙動を示す良い例があったので、引用させていただく。

fgetcsvは内部で次の処理をしている。

1. ファイルから文字列をN文字読み込む
2. 読み込んだ文字をパースして、CSVの行の配列にする

ストリームフィルターはこの1と2の間に割って入ることができる。
したがって、次のような処理ができる。

1. ファイルから文字列をN文字読み込む
2. その文字列をUTF-8に変換する (ストリームフィルタ)
3. 読み込んだ文字をパースして、CSVの行の配列にする

https://qiita.com/suin/items/3edfb9cb15e26bffba11

ストリームコンテキスト

ストリームの挙動を変更したり拡張できるオプション機能。

ストリームラッパー

どのように特定のプロトコル・エンコーディングを扱うかを指示する付加的なコードのこと。
ストリームラッパーは「php://〜」といったURL風のプロトコルである。
ファイルなどのリソースに実際にアクセスする方法は、ファイルが保管されている場所とファイルを保管する方法によって決まり、ローカルにあるファイルにアクセスする方法と、リモート・サーバー上にあるファイルに HTTP や FTP によってアクセスする方法は、まったく異なる。
ストリームラッパーを使用することで、その場所と保管方法にあった呼び出し方法を見つけ出してくれる。

参考:https://qiita.com/desho/items/14361eb8594faf661210

よく使われるのは、「php://memory」「php:temp」で両者の違いは下記となる。

php://memory および php://temp は読み書き可能なストリームで、一時データをファイルのように保存できるラッパーです。
両者の唯一の違いは、php://memory が常にデータをメモリに格納するのに対して php://temp は定義済みの上限 (デフォルトは 2 MB) に達するとテンポラリファイルを使うという点です。

https://www.php.net/manual/ja/wrappers.php.php