《PHP8上級試験対策》data://ストリームラッパーでBase64データを直接読み取る

  • URLをコピーしました!

はじめに

data:// ストリームは、RFC2397で定義された「データをURL内に直接埋め込む」仕組みです。
PHPでは file_get_contents() などのファイル関数でこのスキームを扱うことができ、Base64でエンコードされたデータを自動的にデコードして取得することが可能です。

キーワード:data:// / ストリームラッパー / RFC2397 / Base64 / file_get_contents

目次

data:// ストリームラッパーとは

data:// ストリームラッパーは「URLにデータを直接埋め込む」ための仕組みで、PHP 5.2.0 以降で利用できます。

フォーマットは以下の通りです:

data:[<mediatype>][;base64],<data>
  • <mediatype>: MIMEタイプ(省略可能、デフォルトは text/plain
  • ;base64: Base64エンコードされたデータが続く場合に指定
  • <data>: 実際のデータ(Base64またはURLエンコード)

PHPでの使用例:

<?php
declare(strict_types=1);
error_reporting(-1);

$s = 'exam test string';
$p = 'data://text/plain;base64,' . base64_encode($s);

var_dump($p);                  // Data URL文字列を確認
echo file_get_contents($p);    // ストリームから中身を取得

実行結果:

string(49) "data://text/plain;base64,ZXhhbSB0ZXN0IHN0cmluZw=="
exam test string

ここでポイントは、file_get_contents($p)Base64を自動的にデコードして文字列を返す 点です。

図解:data:// の構造

┌─────────────┬────────────┬──────────────────────────────────┐
│ data:        │ text/plain │ base64,ZXhhbSB0ZXN0IHN0cmluZw== │
│ (スキーム) │ (MIME型) │ (エンコード+データ)                 │
└─────────────┴────────────┴──────────────────────────────────┘
  • var_dump($p) → URL文字列がそのまま確認できる
  • file_get_contents($p) → Base64をデコードした中身を取得

まとめ

  • data:// は RFC2397 に準拠したストリームラッパー
  • URLに直接データを埋め込める
  • file_get_contents() で Base64データをデコードして取得可能
  • MIMEタイプは省略可能、指定することで扱いやすくなる

この記事が気に入ったら
いいねしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次