Signatur
Beschreibung
fdf_get_attachment() gehört zur FDF-Toolkit-Erweiterung (Forms Data Format) und ermöglicht es, Dateianhänge aus FDF-Dokumenten zu extrahieren. FDF-Dateien werden häufig in Verbindung mit Adobe-Acrobat-Formularen verwendet, um Formulardaten – einschließlich Dateiuploads – zu übertragen.
Die Funktion liest den Anhang, der dem angegebenen Formularfeld ($fieldname) zugeordnet ist, aus dem FDF-Dokument heraus und speichert die extrahierte Datei am angegebenen Speicherort ($savepath). Der zurückgegebene Array enthält Metainformationen über die gespeicherte Datei, z. B. den tatsächlichen Dateinamen und den Speicherort.
Diese Funktion ist sinnvoll in Workflows, bei denen Benutzer über PDF-Formulare Dateien hochladen, die dann serverseitig weiterverarbeitet werden müssen. Das FDF-Format ermöglicht hierbei eine strukturierte Übergabe der Daten an den Server.
Hinweis: Die FDF-Erweiterung ist in modernen PHP-Versionen nicht mehr standardmäßig verfügbar und gilt als veraltet. Für neue Projekte sollten alternative PDF-Bibliotheken wie FPDF, TCPDF oder iText erwogen werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $fdf_document Pflicht | resource | Eine FDF-Dokumentressource, wie sie von fdf_open() oder fdf_open_string() zurückgegeben wird. |
|
| $fieldname Pflicht | string | Der Name des Formularfeldes im FDF-Dokument, dem der Anhang zugeordnet ist. | |
| $savepath Pflicht | string | Der vollständige Pfad (Verzeichnis oder Dateiname), unter dem die extrahierte Datei gespeichert werden soll. Wird nur ein Verzeichnis angegeben, wird der Originaldateiname verwendet. |
Rückgabewert
path (vollständiger Speicherpfad der gespeicherten Datei) und name (Originaldateiname des Anhangs). Im Fehlerfall wird false zurückgegeben.Beispiele
Dateianhang aus einem FDF-Formular extrahieren
<?php
// FDF-Datei öffnen, die von einem PDF-Formular übertragen wurde
$fdf = fdf_open_string($HTTP_RAW_POST_DATA);
if ($fdf !== false) {
// Anhang aus dem Feld 'uploaded_file' extrahieren und in ein Verzeichnis speichern
$savepath = '/var/uploads/';
$result = fdf_get_attachment($fdf, 'uploaded_file', $savepath);
if ($result !== false) {
echo 'Datei gespeichert unter: ' . $result['path'] . PHP_EOL;
echo 'Originaldateiname: ' . $result['name'] . PHP_EOL;
} else {
echo 'Fehler beim Extrahieren des Anhangs.' . PHP_EOL;
}
fdf_close($fdf);
} else {
echo 'FDF-Dokument konnte nicht geöffnet werden.' . PHP_EOL;
}
?>
Anhang mit explizitem Zieldateinamen speichern
<?php
// FDF aus einer Datei öffnen
$fdf = fdf_open('/pfad/zur/formular.fdf');
if ($fdf !== false) {
// Zieldateiname explizit angeben
$savepath = '/var/uploads/anhang_' . time() . '.bin';
$result = fdf_get_attachment($fdf, 'dateifeld', $savepath);
if (is_array($result)) {
echo 'Gespeichert: ' . $result['path'] . PHP_EOL;
}
fdf_close($fdf);
}
?>
// Wichtig · Fallstricke
Sicherheitshinweis: Der extrahierte Dateiname (name) stammt aus dem FDF-Dokument und sollte niemals ungeprüft als Dateisystemname verwendet werden. Pfadtraversal-Angriffe (z. B. durch ../ im Dateinamen) müssen durch geeignete Validierung und Sanitierung verhindert werden. Verwende basename(), um nur den Dateinamen ohne Pfadanteile zu extrahieren.
Deprecation: Die FDF-Erweiterung (fdf_*) ist seit langem veraltet und in PHP 8 nicht mehr ohne Weiteres verfügbar. Sie erfordert das Adobe FDF Toolkit als externe Bibliothek. Für neue Projekte sollten modernere Alternativen zur PDF-Verarbeitung genutzt werden.
Stelle sicher, dass das Zielverzeichnis ($savepath) für den Webserver-Prozess beschreibbar ist, und beschränke den Zugriff auf gespeicherte Dateien durch geeignete Serverkonfiguration.