Signatur
Beschreibung
Der data://-Wrapper ist ein PHP-Stream-Wrapper, der das Data-URI-Schema nach RFC 2397 implementiert. Damit können Daten direkt als Zeichenkette in Funktionen übergeben werden, die normalerweise eine Datei oder URL erwarten – etwa file_get_contents(), fopen() oder include().
Die allgemeine Syntax lautet: data://<mediatype>[;base64],<data>. Der Mediatype entspricht einem MIME-Typ wie text/plain oder image/png. Ohne das optionale Schlüsselwort ;base64 werden die Daten als URL-encodierter Klartext interpretiert, mit ;base64 als Base64-codierte Zeichenkette.
Typische Einsatzfälle sind Unit-Tests, bei denen Dateidaten inline bereitgestellt werden sollen, oder das Übergeben kleiner Datenmengen an Streamfunktionen ohne eine temporäre Datei anlegen zu müssen. Auch für das dynamische Einbinden kleiner Code-Fragmente per include wird der Wrapper manchmal verwendet.
Achtung: Der Wrapper muss in der PHP-Konfiguration über allow_url_fopen sowie allow_url_include (für include/require) aktiviert sein. Aus Sicherheitsgründen ist allow_url_include seit PHP 7.4 als veraltet markiert und sollte nicht produktiv eingesetzt werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $mediatype | string | text/plain;charset=US-ASCII | MIME-Typ der Daten, z. B. text/plain oder image/png. Wird er weggelassen, gilt text/plain;charset=US-ASCII. |
| $base64 | string | Optionales Schlüsselwort ;base64. Wenn angegeben, werden die nachfolgenden Daten als Base64-codierte Zeichenkette interpretiert. |
|
| $data Pflicht | string | Die eigentlichen Nutzdaten – entweder als URL-encodierter Klartext oder, bei Angabe von ;base64, als Base64-String. |
Rückgabewert
fopen() wird eine Stream-Ressource zurückgegeben, mit der wie mit einem normalen Datei-Handle gearbeitet werden kann. Schlägt das Öffnen fehl, wird false zurückgegeben.Beispiele
Einfachen Text-Stream mit file_get_contents() lesen
<?php
// Klartext über den data://-Wrapper einlesen
$text = file_get_contents('data://text/plain,Hallo%20Welt');
echo $text;
Base64-codierten Inhalt als Stream öffnen
<?php
// Einen Base64-codierten String als Stream lesen
$base64 = base64_encode('Das ist ein Test.');
$handle = fopen('data://text/plain;base64,' . $base64, 'r');
if ($handle !== false) {
echo stream_get_contents($handle);
fclose($handle);
}
Binärdaten (kleines PNG) als Base64-Stream bereitstellen
<?php
// 1x1 transparentes PNG als Base64
$pngBase64 = 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg==';
$imageData = file_get_contents('data://image/png;base64,' . $pngBase64);
echo 'Gelesene Bytes: ' . strlen($imageData);
// Wichtig · Fallstricke
Sicherheitshinweis: Verwende data:// niemals zusammen mit include oder require, wenn die übergebenen Daten aus Nutzereingaben stammen. Dies ermöglicht Remote-Code-Execution. allow_url_include ist seit PHP 7.4 als deprecated markiert und sollte in der php.ini deaktiviert bleiben (allow_url_include = Off).
Der Wrapper ist nur zum Lesen geeignet; Schreiboperationen werden nicht unterstützt. Für größere Datenmengen empfiehlt sich die Verwendung temporärer Dateien über tmpfile() oder php://temp, da Data-URIs keine effiziente Methode für große Datenmengen darstellen.
Die Verfügbarkeit des Wrappers hängt von allow_url_fopen = On in der php.ini ab. Ist diese Option deaktiviert, schlägt der Zugriff über data:// fehl.