Signatur
Beschreibung
mailparse_uudecode_all() liest den gesamten Inhalt des durch $fp angegebenen Datei-Handles und sucht nach uuencodierten Abschnitten (erkennbar an begin/end-Blöcken). Alle gefundenen Abschnitte werden dekodiert und als temporäre Dateien gespeichert.
Die Funktion gibt ein Array von assoziativen Arrays zurück. Jeder Eintrag enthält den Dateinamen (filename) und einen Datei-Handle (fp), der auf den dekodierten Inhalt zeigt. Der erste Eintrag repräsentiert dabei den Klartext-Anteil der Nachricht (also den Teil vor dem ersten uuencodierten Block).
Diese Funktion ist besonders nützlich, wenn alte E-Mail-Anhänge oder Newsgroup-Beiträge verarbeitet werden sollen, die noch im UUencode-Format vorliegen – einem Kodierungsverfahren, das vor Base64 weit verbreitet war. Sie gehört zur PECL-Erweiterung mailparse und steht nur zur Verfügung, wenn diese installiert und aktiviert ist.
Nach der Verwendung sollten die zurückgegebenen Datei-Handles mit fclose() geschlossen werden, um Ressourcenlecks zu vermeiden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $fp Pflicht | resource | Ein gültiger, geöffneter Datei-Handle (z. B. von fopen()), dessen Inhalt nach uuencodierten Blöcken durchsucht werden soll. Der Zeiger muss am Anfang der Datei stehen oder dorthin zurückgesetzt sein. |
Rückgabewert
filename (Dateiname des dekodierten Abschnitts) und fp (Datei-Handle des temporären, dekodierten Inhalts) enthält. Das erste Element ([0]) enthält stets den Klartext-Anteil. Bei einem Fehler wird false zurückgegeben.Beispiele
Uuencodierte Anhänge aus einer E-Mail-Datei extrahieren
<?php
// Beispiel-E-Mail-Datei mit uuencodierten Anhängen öffnen
$fp = fopen('email_with_uuencoded.txt', 'r');
if ($fp === false) {
die('Datei konnte nicht geöffnet werden.');
}
$decoded = mailparse_uudecode_all($fp);
fclose($fp);
if ($decoded === false) {
die('Dekodierung fehlgeschlagen.');
}
foreach ($decoded as $index => $part) {
if ($index === 0) {
echo "--- Klartext-Anteil ---\n";
} else {
echo "--- Anhang: " . $part['filename'] . " ---\n";
}
// Inhalt des temporären Handles lesen
rewind($part['fp']);
$content = stream_get_contents($part['fp']);
echo substr($content, 0, 200) . "\n";
// Handle schließen, um Ressourcen freizugeben
fclose($part['fp']);
}
?>
Dekodierte Datei auf dem Dateisystem speichern
<?php
$fp = fopen('newsgroup_post.txt', 'r');
if ($fp === false) {
die('Datei konnte nicht geöffnet werden.');
}
$parts = mailparse_uudecode_all($fp);
fclose($fp);
if (is_array($parts)) {
// Ersten Eintrag überspringen (Klartext)
for ($i = 1; $i < count($parts); $i++) {
$filename = basename($parts[$i]['filename']);
$destination = '/tmp/decoded/' . $filename;
rewind($parts[$i]['fp']);
$data = stream_get_contents($parts[$i]['fp']);
fclose($parts[$i]['fp']);
file_put_contents($destination, $data);
echo "Gespeichert: $destination\n";
}
}
?>
// Wichtig · Fallstricke
Erweiterung erforderlich: mailparse_uudecode_all() ist Teil der PECL-Erweiterung mailparse. Sie muss separat installiert werden (pecl install mailparse) und ist nicht Bestandteil der PHP-Kerninstallation.
Ressourcenverwaltung: Die zurückgegebenen fp-Handles zeigen auf temporäre Dateien. Diese sollten nach der Verarbeitung stets mit fclose() geschlossen werden, damit das Betriebssystem die temporären Dateien aufräumen kann.
Sicherheitshinweis: Der im Ergebnis enthaltene filename-Schlüssel stammt direkt aus dem kodierten Block und sollte vor der Verwendung im Dateisystem zwingend mit basename() bereinigt und auf zulässige Zeichen geprüft werden, um Path-Traversal-Angriffe (z. B. ../../etc/passwd) zu verhindern.
Veraltetes Format: UUencode ist ein älteres Kodierungsverfahren und wird in modernen E-Mails kaum noch verwendet. Aktuelle Systeme nutzen stattdessen Base64 gemäß MIME-Standard. Diese Funktion ist daher hauptsächlich für die Verarbeitung von Archivdaten oder älteren Nachrichten relevant.