Signatur
Beschreibung
fdf_enum_values() iteriert über alle Felder und deren Werte in einem geöffneten FDF-Dokument (Forms Data Format) und ruft für jeden Eintrag eine benutzerdefinierte Callback-Funktion auf. Damit lassen sich alle Formularfelddaten eines PDFs systematisch auslesen, ohne vorher die Feldnamen kennen zu müssen.
Die Callback-Funktion wird mit den Parametern $fieldname, $value und dem optionalen $userdata-Wert aufgerufen. Das ermöglicht es, einen beliebigen Kontext (z. B. ein Array oder ein Objekt) durch die gesamte Enumeration hindurchzureichen.
Diese Funktion ist besonders nützlich, wenn ein FDF-Dokument aus einem PDF-Formular ausgewertet werden soll und die Feldstruktur dynamisch oder unbekannt ist. Sie erspart das manuelle Abfragen jedes einzelnen Felds mit fdf_get_value().
Hinweis: Die FDF-Erweiterung ist seit PHP 7.0 nicht mehr im Core enthalten und wird als veraltet betrachtet. Für neue Projekte sollten moderne PDF-Bibliotheken wie FPDI oder pdftk bevorzugt werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $fdf_document Pflicht | resource | Ein gültiges FDF-Dokument-Handle, wie es von fdf_open() oder fdf_open_string() zurückgegeben wird. |
|
| $function Pflicht | callable | Die Callback-Funktion, die für jeden Feldwert aufgerufen wird. Sie erhält als Argumente den Feldnamen (string), den Feldwert (string) und optional den $userdata-Wert. |
|
| $userdata | mixed | null | Ein optionaler Benutzerdaten-Wert beliebigen Typs, der unverändert als drittes Argument an die Callback-Funktion weitergereicht wird. Nützlich, um Kontext wie Arrays oder Objekte zu übergeben. |
Rückgabewert
true bei Erfolg zurück, false bei einem Fehler (z. B. ungültiges FDF-Handle oder fehlerhafte Callback-Funktion).Beispiele
Alle Feldwerte eines FDF-Formulars auslesen
<?php
// FDF-Datei öffnen
$fdf = fdf_open('/pfad/zum/formular.fdf');
if ($fdf === false) {
die('FDF-Dokument konnte nicht geöffnet werden.');
}
// Array zum Sammeln der Werte
$felddaten = [];
// Callback-Funktion definieren
function feldCallback(string $feldname, string $wert, array &$daten): void {
$daten[$feldname] = $wert;
}
// Über alle Felder iterieren
fdf_enum_values($fdf, 'feldCallback', $felddaten);
// Ergebnis ausgeben
foreach ($felddaten as $name => $wert) {
echo htmlspecialchars($name) . ': ' . htmlspecialchars($wert) . PHP_EOL;
}
fdf_close($fdf);
?>
Feldwerte mit einer anonymen Funktion und Closure auslesen
<?php
$fdf = fdf_open_string(file_get_contents('php://input'));
if ($fdf === false) {
http_response_code(400);
exit('Ungültige FDF-Daten.');
}
$ergebnis = [];
fdf_enum_values(
$fdf,
function (string $feldname, string $wert) use (&$ergebnis): void {
// Nur nicht-leere Felder übernehmen
if ($wert !== '') {
$ergebnis[$feldname] = $wert;
}
}
);
fdf_close($fdf);
// Ergebnis als JSON ausgeben
header('Content-Type: application/json; charset=utf-8');
echo json_encode($ergebnis, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
?>
// Wichtig · Fallstricke
Veraltete Erweiterung: Die fdf-Erweiterung ist seit PHP 7.0 nicht mehr Bestandteil des PHP-Kerns und steht in modernen PHP-Versionen (ab PHP 8.0) standardmäßig nicht mehr zur Verfügung. Für neue Projekte sollten Alternativen wie pdftk oder PHP-Bibliotheken wie mikehaertl/phppdftk genutzt werden.
Sicherheitshinweis: FDF-Daten, die aus Benutzer-Uploads stammen, sollten grundsätzlich als nicht vertrauenswürdig behandelt werden. Alle ausgelesenen Feldwerte müssen vor der Ausgabe im HTML-Kontext mit htmlspecialchars() und vor der Datenbankverwendung mit Prepared Statements abgesichert werden.
Referenzübergabe: Wenn der $userdata-Parameter als Referenz an die Callback-Funktion übergeben werden soll (um gesammelte Daten direkt zu modifizieren), muss die Callback-Signatur eine Referenz (&$userdata) deklarieren, da fdf_enum_values() den Wert nicht automatisch als Referenz weitergibt.