Signatur
Beschreibung
ibase_blob_get liest einen Datenblock der angegebenen Länge aus einem zuvor mit ibase_blob_open geöffneten BLOB (Binary Large Object). Die Funktion gibt den gelesenen Teilstring zurück oder false bei einem Fehler.
BLOBs in Firebird/InterBase werden segmentweise gelesen. ibase_blob_get wird typischerweise in einer Schleife aufgerufen, bis das gesamte BLOB ausgelesen wurde. Der interne Lesezeiger des BLOB-Handles wird bei jedem Aufruf um die gelesenen Bytes weitergerückt, sodass aufeinanderfolgende Aufrufe sequenziell durch das BLOB navigieren.
Diese Funktion ist sinnvoll, wenn große Binärdaten (Bilder, Dokumente, Audiodateien) aus einer Firebird- oder InterBase-Datenbank segmentiert ausgelesen werden sollen, um den Speicherverbrauch zu begrenzen. Für kleine BLOBs kann alternativ ibase_blob_echo verwendet werden, das den Inhalt direkt auf die Standardausgabe ausgibt.
Hinweis: Die Firebird/InterBase-Extension (ibase_*) wurde in PHP 7.4 aus dem PHP-Core entfernt und steht seitdem als PECL-Paket php-firebird bzw. php-interbase zur Verfügung.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $blob_handle Pflicht | resource | Ein BLOB-Handle, das zuvor mit ibase_blob_open geöffnet wurde. |
|
| $len Pflicht | int | Die Anzahl der Bytes, die aus dem BLOB gelesen werden sollen. Der tatsächlich zurückgegebene String kann kürzer sein, wenn das Ende des BLOBs erreicht wurde. |
Rückgabewert
false bei einem Fehler. Wenn das Ende des BLOBs erreicht ist, gibt die Funktion einen leeren String oder false zurück.Beispiele
BLOB segmentweise auslesen und in Datei speichern
<?php
$dbh = ibase_connect('localhost:mydatabase', 'username', 'password');
$result = ibase_query($dbh, 'SELECT BLOB_COLUMN FROM MY_TABLE WHERE ID = 1');
$row = ibase_fetch_object($result);
// BLOB-Handle öffnen
$blobHandle = ibase_blob_open($dbh, $row->BLOB_COLUMN);
$blobData = '';
$chunkSize = 8192; // 8 KB pro Lesevorgang
while ($chunk = ibase_blob_get($blobHandle, $chunkSize)) {
$blobData .= $chunk;
}
ibase_blob_close($blobHandle);
ibase_close($dbh);
// Gelesene Daten in eine Datei schreiben
file_put_contents('/tmp/blob_output.bin', $blobData);
echo 'BLOB gespeichert, Größe: ' . strlen($blobData) . ' Bytes';
?>
BLOB als HTTP-Response streamen
<?php
$dbh = ibase_connect('localhost:mydatabase', 'username', 'password');
$result = ibase_query($dbh, 'SELECT IMAGE_DATA FROM IMAGES WHERE IMAGE_ID = 42');
$row = ibase_fetch_object($result);
$blobHandle = ibase_blob_open($dbh, $row->IMAGE_DATA);
header('Content-Type: image/jpeg');
$chunkSize = 4096;
while ($chunk = ibase_blob_get($blobHandle, $chunkSize)) {
echo $chunk;
}
ibase_blob_close($blobHandle);
ibase_close($dbh);
?>
// Wichtig · Fallstricke
Deprecation / Entfernung: Die ibase_*-Funktionen wurden in PHP 7.4 aus dem PHP-Kern entfernt. Ab PHP 8.0 müssen sie als PECL-Extension (ibase bzw. Firebird) installiert werden. Neue Projekte sollten die fbird_*-Funktionen oder PDO mit dem Firebird-Treiber verwenden.
Schleifenbedingung: Da ibase_blob_get am Ende des BLOBs einen leeren String oder false zurückgeben kann, sollte die Schleifenbedingung sorgfältig formuliert werden (z. B. while ($chunk = ...) bricht bei leerem String oder false ab). Bei sehr kleinen BLOBs könnte die Bedingung vorzeitig abbrechen, wenn ein Segment exakt leer ist — in solchen Fällen empfiehlt sich eine explizite Überprüfung mit !== false.
Ressourcen freigeben: Das BLOB-Handle muss nach Verwendung immer mit ibase_blob_close geschlossen werden, um Ressourcenlecks zu vermeiden.