Signatur
Beschreibung
fbird_blob_echo() ist ein Alias für ibase_blob_echo() und ermöglicht es, den Inhalt eines geöffneten BLOB-Handles (Binary Large Object) aus einer Firebird- oder InterBase-Datenbank direkt an den PHP-Ausgabepuffer zu senden. Die Funktion arbeitet streamingbasiert und ist besonders nützlich, wenn große Binärdaten (z. B. Bilder, PDF-Dateien oder Videos) ohne unnötigen Speicherverbrauch direkt an den Browser ausgeliefert werden sollen.
Im Gegensatz zu ibase_blob_get(), das einen Teil des BLOB-Inhalts als String zurückgibt, schreibt fbird_blob_echo() den gesamten Inhalt direkt in den Output-Stream. Das spart Speicher bei großen Dateien erheblich, da keine PHP-seitige Pufferung des gesamten BLOB-Inhalts notwendig ist.
Vor der Verwendung muss ein BLOB mit ibase_blob_open() geöffnet werden, um ein gültiges Handle zu erhalten. Nach der Ausgabe sollte das Handle mit ibase_blob_close() wieder geschlossen werden. Die Funktion eignet sich gut für Download-Skripte oder Inline-Anzeige von Binärdaten über HTTP.
- Geeignet für großen Binärinhalt (Bilder, Dokumente, Mediadateien).
- Kein Umweg über PHP-Strings nötig – direktes Streaming.
- Nur für geöffnete BLOB-Handles, nicht für BLOB-IDs.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $blob_handle Pflicht | resource | Ein gültiges BLOB-Handle, das zuvor mit ibase_blob_open() geöffnet wurde. Ungültige oder bereits geschlossene Handles führen zu einem Fehler. |
Rückgabewert
true bei Erfolg zurück. Im Fehlerfall (z. B. ungültiges Handle oder Datenbankfehler) wird false zurückgegeben.Beispiele
Bild aus Firebird-BLOB direkt an den Browser senden
<?php
// Verbindung zur Firebird-Datenbank herstellen
$dbh = ibase_connect('/var/db/meine_datenbank.fdb', 'sysdba', 'masterkey');
// BLOB-ID aus einer Tabelle abfragen
$result = ibase_query($dbh, 'SELECT BILD FROM PRODUKTE WHERE ID = 42');
$row = ibase_fetch_object($result);
// BLOB öffnen
$blob_handle = ibase_blob_open($dbh, $row->BILD);
// Passenden Content-Type-Header senden
header('Content-Type: image/jpeg');
// BLOB-Inhalt direkt ausgeben
fbird_blob_echo($blob_handle);
// BLOB schließen
ibase_blob_close($blob_handle);
// Verbindung trennen
ibase_close($dbh);
?>
PDF-Dokument aus BLOB als Download anbieten
<?php
$dbh = ibase_connect('/var/db/dokumente.fdb', 'sysdba', 'masterkey');
$result = ibase_query($dbh, "SELECT DATEI, DATEINAME FROM DOKUMENTE WHERE ID = 7");
$row = ibase_fetch_object($result);
$blob_handle = ibase_blob_open($dbh, $row->DATEI);
// HTTP-Header für Datei-Download setzen
header('Content-Type: application/pdf');
header('Content-Disposition: attachment; filename="' . basename($row->DATEINAME) . '"');
// Inhalt direkt ausgeben
if (!fbird_blob_echo($blob_handle)) {
error_log('Fehler beim Ausgeben des BLOBs');
http_response_code(500);
}
ibase_blob_close($blob_handle);
ibase_close($dbh);
?>
// Wichtig · Fallstricke
Deprecation-Hinweis: Die fbird_*-Funktionen sind Aliase der ibase_*-Funktionen. Seit PHP 8.0 wurde die interbase-Erweiterung aus dem PHP-Kern entfernt. Für PHP 8+ steht die separate ibase PECL-Extension zur Verfügung, oder es sollte auf eine alternative Firebird-Bibliothek umgestellt werden.
Sicherheit: Stellen Sie sicher, dass die abgerufene BLOB-ID aus einer vertrauenswürdigen Quelle stammt. Nutzer-Eingaben, die zur Auswahl des BLOBs verwendet werden, müssen immer mit Prepared Statements oder Escaped-Werten abgesichert werden, um SQL-Injection zu verhindern.
Ausgabepuffer: Wenn PHP-Output-Buffering aktiv ist (z. B. durch ob_start()), wird der BLOB-Inhalt zunächst in den Buffer geschrieben. Bei sehr großen BLOBs kann dies zu Speicherproblemen führen. In solchen Fällen den Buffer vorher mit ob_end_clean() deaktivieren.