Start · Sprachen · PHP · Referenz · fdf_enum_values

fdf_enum_values

Funktion

Ruft für jeden Feldwert in einem FDF-Dokument eine benutzerdefinierte Callback-Funktion auf.

seit PHP 4.3.0 Kategorie: io

Signatur

fdf_enum_values(resource $fdf_document, callable $function, mixed $userdata = null): bool

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

Typ
bool
Beschreibung
Gibt 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);
?>
vorname: Max nachname: Mustermann email: max@example.com

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);
?>
{ "vorname": "Anna", "nachname": "Schmidt" }

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