Start · Sprachen · PHP · Referenz · mailparse_determine_best_xfer_encoding

mailparse_determine_best_xfer_encoding

Funktion

Liest einen Stream und ermittelt die optimale MIME-Transfer-Kodierung (z. B. <code>7bit</code>, <code>8bit</code> oder <code>base64</code>) für dessen Inhalt.

seit PHP 5.0.0 Kategorie: http

Signatur

mailparse_determine_best_xfer_encoding(resource $fp): string

Beschreibung

mailparse_determine_best_xfer_encoding() analysiert den Inhalt eines geöffneten Datei- oder Stream-Ressource und bestimmt, welche MIME-Transfer-Kodierung am besten für diesen Inhalt geeignet ist. Das Ergebnis ist ein String wie 7bit, 8bit, quoted-printable oder base64, der angibt, wie der Inhalt beim Versand in einer E-Mail kodiert werden sollte.

Die Funktion liest den kompletten Stream (beginnend von der aktuellen Position) und prüft, welche Zeichen vorhanden sind: Enthält der Inhalt ausschließlich ASCII-Zeichen und keine langen Zeilen, wird 7bit zurückgegeben. Enthält er 8-Bit-Zeichen oder Binärdaten, wird entsprechend 8bit oder base64 empfohlen.

Diese Funktion ist Teil der PECL-Erweiterung mailparse und wird typischerweise verwendet, wenn E-Mails manuell zusammengestellt oder analysiert werden – beispielsweise beim Aufbau von MIME-Teilen oder beim Weiterleiten von Anhängen. Sie hilft dabei, RFC-konforme E-Mails zu erzeugen.

Hinweis: Der Stream-Zeiger wird durch den Lesevorgang verschoben; es kann notwendig sein, ihn anschließend mit rewind() oder fseek() zurückzusetzen, bevor der Stream erneut gelesen wird.

Parameter

Name Typ Default Beschreibung
$fp Pflicht resource Ein gültiger Datei- oder Stream-Handle, wie er z. B. von fopen() zurückgegeben wird. Der Inhalt dieses Streams wird ab der aktuellen Zeigerposition analysiert.

Rückgabewert

Typ
string
Beschreibung
Gibt einen String mit der empfohlenen Transfer-Kodierung zurück, z. B. 7bit, 8bit, quoted-printable oder base64. Im Fehlerfall kann false zurückgegeben werden.

Beispiele

Transfer-Kodierung für eine Textdatei ermitteln

<?php
// Textdatei öffnen
$fp = fopen('/pfad/zur/textdatei.txt', 'r');
if ($fp === false) {
    die('Datei konnte nicht geöffnet werden.');
}

// Beste Transfer-Kodierung ermitteln
$encoding = mailparse_determine_best_xfer_encoding($fp);
echo 'Empfohlene Transfer-Kodierung: ' . $encoding . PHP_EOL;

// Zeiger zurücksetzen, falls Datei danach nochmals gelesen werden soll
rewind($fp);

fclose($fp);
?>
Empfohlene Transfer-Kodierung: 7bit

Transfer-Kodierung für eine Binärdatei (z. B. PDF) ermitteln

<?php
// Binärdatei öffnen
$fp = fopen('/pfad/zur/datei.pdf', 'rb');
if ($fp === false) {
    die('Datei konnte nicht geöffnet werden.');
}

$encoding = mailparse_determine_best_xfer_encoding($fp);
echo 'Empfohlene Transfer-Kodierung: ' . $encoding . PHP_EOL;

// Stream-Position zurücksetzen
rewind($fp);

// Inhalt lesen und entsprechend kodieren
$inhalt = stream_get_contents($fp);
if ($encoding === 'base64') {
    $kodiert = base64_encode($inhalt);
    echo 'Inhalt wurde Base64-kodiert (' . strlen($kodiert) . ' Bytes).' . PHP_EOL;
}

fclose($fp);
?>
Empfohlene Transfer-Kodierung: base64 Inhalt wurde Base64-kodiert (XXXXX Bytes).

// Wichtig · Fallstricke

Voraussetzung: Die Funktion ist nur verfügbar, wenn die PECL-Erweiterung mailparse installiert und aktiviert ist. Sie ist nicht Teil der PHP-Kerninstallation.

Stream-Position: Nach dem Aufruf befindet sich der Datei-Zeiger am Ende des Streams. Vor einem erneuten Lesen muss rewind($fp) oder fseek($fp, 0) aufgerufen werden, da sonst kein Inhalt mehr gelesen wird.

RFC-Konformität: Die ermittelte Kodierung richtet sich nach den MIME-Standards (RFC 2045). Die Verwendung der empfohlenen Kodierung stellt sicher, dass E-Mails von allen konformen Mail-Servern und -Clients korrekt verarbeitet werden können.