Start · Sprachen · PHP · Referenz · mailparse_stream_encode

mailparse_stream_encode

Funktion

Liest Daten aus einem Quell-Stream, kodiert sie gemäß dem angegebenen Encoding und schreibt das Ergebnis in einen Ziel-Stream.

Kategorie: http

Signatur

mailparse_stream_encode(resource $sourcefp, resource $destfp, string $encoding): bool

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

Typ
bool
Beschreibung
Gibt 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);
?>
Base64-kodierter Inhalt (erste 100 Zeichen): iVBORw0KGgoAAAANSUhEUgAA...

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);
?>
Hallo Welt! Umlaute: =C3=A4 =C3=B6 =C3=BC =C3=9F Das ist eine Testzeile mit Sonderzeichen.

// 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.