Signatur
Beschreibung
fdf_open_string() analysiert einen FDF-Daten-String und erzeugt daraus eine interne FDF-Dokumentressource. FDF (Forms Data Format) ist ein von Adobe entwickeltes Format zum Übertragen von Formularfelddaten aus PDF-Formularen. Mit dieser Funktion kann man FDF-Daten verarbeiten, die z. B. direkt als HTTP-POST-Body übermittelt wurden, ohne zuvor eine temporäre Datei anlegen zu müssen.
Der typische Anwendungsfall ist die Verarbeitung von PDF-Formularübermittlungen im Web: Ein PDF-Formular sendet seine Daten als FDF-Datenstrom an einen PHP-Server. Statt diese Daten zunächst auf der Festplatte zu speichern, kann fdf_open_string() sie direkt im Speicher verarbeiten. Dies ist effizienter und sicherer als der Umweg über eine temporäre Datei.
Das zurückgegebene Ressource-Handle kann anschließend mit anderen FDF-Funktionen wie fdf_get_value(), fdf_next_field_name() oder fdf_get_status() verwendet werden. Nach der Verarbeitung sollte die Ressource mit fdf_close() freigegeben werden.
Hinweis: Die FDF-Erweiterung (ext/fdf) ist seit PHP 5.3.0 als PECL-Paket ausgegliedert und gilt als veraltet. Für moderne Anwendungen empfiehlt sich die Verwendung von Bibliotheken wie FPDF, FPDI oder iText.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $fdf_data Pflicht | string | Ein String mit den rohen FDF-Dokumentdaten, wie sie typischerweise als HTTP-POST-Body von einem PDF-Formular übermittelt werden. |
Rückgabewert
false zurückgegeben.Beispiele
FDF-Formulardaten aus HTTP-POST verarbeiten
<?php
// PDF-Formulare senden FDF-Daten als rohen POST-Body
$fdf_data = file_get_contents('php://input');
if (empty($fdf_data)) {
die('Keine FDF-Daten empfangen.');
}
$fdf = fdf_open_string($fdf_data);
if ($fdf === false) {
die('FDF-Daten konnten nicht geparst werden.');
}
// Alle Feldnamen und Werte auslesen
$field = fdf_next_field_name($fdf);
while ($field !== false && $field !== '') {
$value = fdf_get_value($fdf, $field);
echo htmlspecialchars($field) . ' = ' . htmlspecialchars($value) . PHP_EOL;
$field = fdf_next_field_name($fdf, $field);
}
fdf_close($fdf);
?>
Konkreten Feldwert aus FDF-String auslesen
<?php
// Beispiel: Minimaler FDF-String (normalerweise vom PDF-Formular generiert)
$fdf_data = "%FDF-1.2\n1 0 obj\n<< /FDF << /Fields [ << /T (Name) /V (Max Mustermann) >> ] >> >>\nendobj\ntrailer\n<< /Root 1 0 R >>\n%%EOF";
$fdf = fdf_open_string($fdf_data);
if ($fdf !== false) {
$name = fdf_get_value($fdf, 'Name');
echo 'Name aus FDF-Formular: ' . htmlspecialchars($name) . PHP_EOL;
fdf_close($fdf);
} else {
echo 'Fehler beim Öffnen des FDF-Strings.' . PHP_EOL;
}
?>
// Wichtig · Fallstricke
Deprecation: Die FDF-Erweiterung wurde aus dem PHP-Kern entfernt und ist seit PHP 5.3.0 nur noch über PECL verfügbar. In modernen PHP-Versionen (ab PHP 8.x) ist sie praktisch nicht mehr verfügbar. Für neue Projekte sollten alternative Bibliotheken zur PDF-Formularverarbeitung genutzt werden.
Sicherheit: FDF-Daten aus nicht vertrauenswürdigen Quellen sollten als potenziell gefährlich betrachtet werden. Alle ausgelesenen Feldwerte müssen vor der Ausgabe im Browser mit htmlspecialchars() und vor der Datenbankverwendung mit entsprechenden Escape-Methoden gesichert werden, um XSS- und SQL-Injection-Angriffe zu verhindern.
Im Gegensatz zu fdf_open(), das eine Datei vom Dateisystem liest, arbeitet fdf_open_string() direkt im Arbeitsspeicher und ist daher für die Verarbeitung von HTTP-Formulardaten die bevorzugte Methode.