はじめに
PHPには、ファイル・ネットワーク・データ圧縮といった入出力を一貫したインターフェースで扱う「ストリーム」という仕組みがあります。このストリームで、特定のプロトコルやエンコーディングを扱うための仕組みが「ラッパー(wrapper)」です。
この記事では、stream_get_wrappers()
関数で取得できるラッパー一覧と、その理解ポイントを整理します。
目次
🧩 ストリームとは?
PHPの「ストリーム」は、ファイル・ネットワーク・圧縮データなどを共通の仕組みで扱うための抽象化レイヤーです。たとえば、次のようなコードはいずれも同じ fopen()
関数を使っていますが、内部的には異なる種類のストリームが動いています。
fopen('file.txt', 'r'); // ローカルファイル
fopen('https://example.com', 'r'); // HTTP通信
fopen('compress.zlib://data.gz', 'r'); // 圧縮データ
これらは共通のインターフェースで操作できる点が、ストリームの大きな強みです。
🧠 ラッパー(wrapper)とは?
ストリームの「ラッパー」は、特定のプロトコルや形式を処理するためのハンドラです。
たとえば、http://
のラッパーはHTTP通信を担当し、php://
のラッパーはPHP自身の入出力を扱います。
主なラッパー一覧:
ラッパー名 | 用途 |
---|---|
file | ローカルファイル操作 |
http , https | HTTP/HTTPS通信 |
ftp , ftps | FTP通信 |
php | PHP入出力(例:php://stdout ) |
compress.zlib | zlib圧縮ファイル |
data | Data URIスキーム |
glob | ワイルドカード展開 |
phar | PHARアーカイブ |
zip | ZIPアーカイブ |
🧮 stream_get_wrappers()関数とは?
PHPに現在登録されているラッパーの一覧を取得するには、stream_get_wrappers()
関数を使います。
<?php
declare(strict_types=1);
error_reporting(-1);
var_dump(stream_get_wrappers());
実行結果(標準的なPHP環境の例):
array(11) {
[0] => string(5) "https"
[1] => string(4) "ftps"
[2] => string(13) "compress.zlib"
[3] => string(3) "php"
[4] => string(4) "file"
[5] => string(4) "glob"
[6] => string(4) "data"
[7] => string(4) "http"
[8] => string(3) "ftp"
[9] => string(4) "phar"
[10] => string(3) "zip"
}
✅ この出力は正しい結果です。
試験問題でも「代表的な標準環境でのラッパー一覧」として登場することがあります。
※ただし、zip
や ftps
は PHPビルド時の拡張モジュール(zip
, openssl
など)によっては含まれない場合もあります。
🔍 図解:PHPストリームの全体像
┌────────────────────────┐
│ PHP Stream │ ← 入出力を抽象化した仕組み
└─────────┬──────────────┘
│
├── file:// → ローカルファイル
├── http://, https:// → HTTP通信
├── ftp://, ftps:// → FTP通信
├── php:// → PHPの標準入出力
├── compress.zlib:// → 圧縮データ
├── data:// → Data URI
├── glob:// → ワイルドカード
├── phar:// → PHARアーカイブ
└── zip:// → ZIPファイル
🧾 まとめ
観点 | 内容 |
---|---|
ストリーム | 入出力を共通の仕組みで扱うPHPの抽象化レイヤー |
ラッパー | 各プロトコルやデータ形式を扱うハンドラ |
関数 | stream_get_wrappers() で登録済みのラッパー一覧を取得可能 |
試験ポイント | 出力結果(配列の中身)は「標準環境の代表例」として覚えておく |