Start · Sprachen · PHP · Referenz · fbird_blob_echo

fbird_blob_echo

Funktion

Gibt den Inhalt eines Firebird/InterBase-BLOBs direkt in den Ausgabepuffer aus, ohne ihn in eine PHP-Variable zu laden.

seit PHP 5.0.0 Kategorie: db

Signatur

fbird_blob_echo(resource $blob_handle): bool

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

Typ
bool
Beschreibung
Gibt 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.