Signatur
Beschreibung
mailparse_stream_encode() ist Teil der PECL-Erweiterung mailparse und dient dazu, den Inhalt eines Streams in eine bestimmte MIME-konforme Kodierung umzuwandeln. Die Funktion liest dabei den gesamten Inhalt des Quell-Streams und schreibt das kodierte Ergebnis in den Ziel-Stream.
Typische Anwendungsfälle sind die Vorbereitung von E-Mail-Anhängen oder -Bodys für den Versand: Binärdaten wie Bilder oder Dokumente müssen vor dem Einbetten in eine MIME-E-Mail in Base64 kodiert werden, während Text-Inhalte häufig als quoted-printable kodiert werden. Diese Funktion übernimmt diese Transformation direkt zwischen zwei offenen PHP-Streams (z. B. Datei-Handles oder In-Memory-Streams).
Unterstützte Kodierungen sind unter anderem base64, quoted-printable, 8bit, 7bit und binary. Der Quell-Stream muss lesbar und der Ziel-Stream beschreibbar sein. Nach dem Aufruf befinden sich der Lese-Zeiger des Quell-Streams und der Schreib-Zeiger des Ziel-Streams an der zuletzt verarbeiteten Position.
Die Funktion eignet sich besonders dann, wenn man große Mengen an Daten effizient kodieren möchte, ohne den gesamten Inhalt in eine PHP-Variable laden zu müssen – sie arbeitet stream-basiert und ist damit speicherschonend.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $sourcefp Pflicht | resource | Ein lesbarer Stream-Handle (z. B. geöffnet mit fopen() oder tmpfile()), dessen Inhalt kodiert werden soll. |
|
| $destfp Pflicht | resource | Ein beschreibbarer Stream-Handle, in den die kodierten Daten geschrieben werden. | |
| $encoding Pflicht | string | Die gewünschte Kodierung. Gültige Werte sind z. B. base64, quoted-printable, 8bit, 7bit und binary. |
Rückgabewert
true bei Erfolg zurück, false wenn ein Fehler auftrat (z. B. ungültige Stream-Handles oder nicht unterstützte Kodierung).Beispiele
Datei in Base64 kodieren und in temporären Stream schreiben
<?php
// Quelldatei öffnen (z. B. ein Bild)
$source = fopen('/pfad/zur/datei/bild.png', 'rb');
if ($source === false) {
die('Quelldatei konnte nicht geöffnet werden.');
}
// Ziel-Stream anlegen (In-Memory)
$dest = fopen('php://temp', 'r+b');
if ($dest === false) {
fclose($source);
die('Ziel-Stream konnte nicht erstellt werden.');
}
// Kodierung durchführen
$result = mailparse_stream_encode($source, $dest, 'base64');
if ($result) {
// Ziel-Stream von vorne lesen
rewind($dest);
$encoded = stream_get_contents($dest);
echo "Base64-kodierter Inhalt (erste 100 Zeichen):\n";
echo substr($encoded, 0, 100) . "\n";
} else {
echo "Kodierung fehlgeschlagen.\n";
}
fclose($source);
fclose($dest);
?>
Text-Inhalt als Quoted-Printable kodieren
<?php
// Quell-Stream mit Text-Inhalt befüllen
$source = fopen('php://temp', 'r+b');
fwrite($source, "Hallo Welt! Umlaute: ä ö ü ß\nDas ist eine Testzeile mit Sonderzeichen.");
rewind($source);
// Ziel-Stream anlegen
$dest = fopen('php://temp', 'r+b');
// Als quoted-printable kodieren
$ok = mailparse_stream_encode($source, $dest, 'quoted-printable');
if ($ok) {
rewind($dest);
echo stream_get_contents($dest);
} else {
echo "Fehler bei der Kodierung.\n";
}
fclose($source);
fclose($dest);
?>
// Wichtig · Fallstricke
Wichtig: mailparse_stream_encode() ist Teil der PECL-Erweiterung mailparse, die separat installiert werden muss und nicht im Standard-PHP-Lieferumfang enthalten ist. Prüfe die Verfügbarkeit mit extension_loaded('mailparse').
Der Quell-Stream wird von seiner aktuellen Position aus gelesen. Stelle sicher, dass der Dateizeiger vor dem Aufruf korrekt positioniert ist (ggf. mit rewind()). Entsprechendes gilt für den Ziel-Stream, wenn du dessen Inhalt anschließend lesen möchtest.
Bei ungültiger Kodierungsangabe gibt die Funktion false zurück. Es wird keine Exception geworfen, daher sollte der Rückgabewert stets geprüft werden.