Start · Sprachen · PHP · Referenz · ibase_blob_echo

ibase_blob_echo

Funktion

Gibt den Inhalt eines InterBase/Firebird-BLOBs direkt an den Browser (Standardausgabe) aus.

seit PHP 5.0.0 Kategorie: db

Signatur

ibase_blob_echo(resource $blob_id): bool

Beschreibung

ibase_blob_echo() liest den Inhalt eines BLOB-Objekts aus einer InterBase- oder Firebird-Datenbank und schreibt ihn unmittelbar in den Ausgabepuffer, ohne den Inhalt als PHP-Variable zu speichern. Dies ist besonders nützlich, wenn große Binärdaten (z. B. Bilder, PDFs oder andere Dateien) direkt an den Client gestreamt werden sollen, ohne den PHP-Speicher zu belasten.

Der Funktion wird ein BLOB-Bezeichner übergeben, der z. B. durch ibase_fetch_row() oder ibase_fetch_object() aus einer Abfrage stammt. Intern öffnet die Funktion den BLOB, liest ihn segmentweise und gibt ihn aus — vergleichbar mit einem kombinierten ibase_blob_open(), ibase_blob_get() und ibase_blob_close().

Typische Einsatzbereiche sind Download-Skripte, bei denen der BLOB-Inhalt zusammen mit passenden HTTP-Headern (z. B. Content-Type, Content-Disposition) direkt ausgeliefert wird. Für kleinere BLOBs, deren Inhalt weiterverarbeitet werden soll, empfiehlt sich stattdessen ibase_blob_get().

Hinweis: Die ibase_*-Funktionen sind seit PHP 7.4 in die PECL-Erweiterung ibase ausgelagert und ab PHP 8.0 nicht mehr im PHP-Kern enthalten. Für moderne Projekte sollte die Firebird/InterBase-PDO-Erweiterung in Betracht gezogen werden.

Parameter

Name Typ Default Beschreibung
$blob_id Pflicht resource Ein BLOB-Bezeichner (Resource), der z. B. durch ibase_fetch_row() oder ibase_blob_create() aus einer InterBase/Firebird-Verbindung stammt.

Rückgabewert

Typ
bool
Beschreibung
Gibt true bei Erfolg zurück, false bei einem Fehler (z. B. ungültiger BLOB-Bezeichner oder Datenbankfehler).

Beispiele

Bild-BLOB direkt an den Browser senden

<?php
// Datenbankverbindung herstellen
$dbh = ibase_connect('localhost:/pfad/zur/datenbank.fdb', 'sysdba', 'masterkey');

// Abfrage: Bild-BLOB für ein bestimmtes Produkt abrufen
$stmt = ibase_query($dbh, 'SELECT BILD FROM PRODUKTE WHERE ID = 42');
$row  = ibase_fetch_row($stmt);

if ($row !== false && $row[0] !== null) {
    // HTTP-Header für ein JPEG-Bild setzen
    header('Content-Type: image/jpeg');
    header('Content-Disposition: inline; filename="produkt_42.jpg"');

    // BLOB direkt in die Ausgabe schreiben
    if (!ibase_blob_echo($row[0])) {
        // Fehlerbehandlung
        header('HTTP/1.1 500 Internal Server Error');
        echo 'Fehler beim Lesen des BLOBs.';
    }
} else {
    header('HTTP/1.1 404 Not Found');
    echo 'Bild nicht gefunden.';
}

ibase_free_result($stmt);
ibase_close($dbh);

PDF-Datei als Download ausliefern

<?php
$dbh  = ibase_connect('localhost:/data/archiv.fdb', 'sysdba', 'masterkey');
$stmt = ibase_query($dbh, "SELECT DOKUMENT FROM ARCHIV WHERE DOCID = 100");
$row  = ibase_fetch_row($stmt);

if ($row && $row[0]) {
    header('Content-Type: application/pdf');
    header('Content-Disposition: attachment; filename="dokument_100.pdf"');
    header('Cache-Control: private, max-age=0, must-revalidate');

    ibase_blob_echo($row[0]);
}

ibase_free_result($stmt);
ibase_close($dbh);

// Wichtig · Fallstricke

Deprecation / Verfügbarkeit: Die ibase_*-Erweiterung wurde in PHP 7.4 als veraltet markiert und in PHP 8.0 aus dem PHP-Kern entfernt. Sie steht seitdem nur noch als PECL-Paket (pecl install ibase) zur Verfügung. Neue Projekte sollten PDO mit dem Firebird-Treiber verwenden.

Ausgabe-Buffering: Da ibase_blob_echo() direkt in die Ausgabe schreibt, müssen alle HTTP-Header vor dem Aufruf gesetzt sein. Ist bereits Ausgabe erfolgt (z. B. durch versehentliche Leerzeichen vor <?php), schlägt header() fehl. Der Einsatz von ob_start()/ob_end_clean() vor dem Headerversand kann helfen.

Speicher: Im Gegensatz zu ibase_blob_get() wird der BLOB-Inhalt nicht als PHP-String zwischengespeichert, was bei großen Datenmengen Speicher spart und die Auslieferung beschleunigt.