Signatur
Beschreibung
ibase_blob_open() öffnet einen bereits in der Datenbank gespeicherten BLOB (Binary Large Object) anhand seiner BLOB-ID und gibt ein Handle zurück, über das der Inhalt in einzelnen Teilen (Chunks) ausgelesen werden kann. Dies ist besonders nützlich, wenn sehr große Binär- oder Textdaten (z. B. Bilder, Dokumente) nicht auf einmal in den Speicher geladen werden sollen.
Der zurückgegebene BLOB-Handle kann anschließend mit ibase_blob_get() verwendet werden, um Daten stückweise abzurufen. Nach dem Lesen sollte der BLOB mit ibase_blob_close() wieder geschlossen werden, um Ressourcen freizugeben.
Der Parameter link_identifier ist optional – wird er weggelassen, wird die zuletzt geöffnete Datenbankverbindung verwendet. Die $blob_id erhält man typischerweise aus einer Datenbankabfrage, die eine BLOB-Spalte zurückgibt.
Hinweis: Die ibase_*-Funktionen gelten ab PHP 8.0 als veraltet und wurden aus dem PHP-Core entfernt. Sie sind weiterhin über die PECL-Erweiterung ibase bzw. interbase verfügbar.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $link_identifier Pflicht | resource | Eine aktive Firebird/InterBase-Datenbankverbindung, wie sie von ibase_connect() oder ibase_pconnect() zurückgegeben wird. Wird die Verbindung weggelassen, wird die zuletzt geöffnete Verbindung verwendet. |
|
| $blob_id Pflicht | string | Die BLOB-ID des zu öffnenden BLOBs. Diese ID wird typischerweise aus dem Ergebnis einer Datenbankabfrage auf eine BLOB-Spalte gewonnen. |
Rückgabewert
ibase_blob_get() zum Lesen und mit ibase_blob_close() zum Schließen verwendet werden kann. Bei einem Fehler wird false zurückgegeben.Beispiele
BLOB-Inhalt eines Datenbankfeldes lesen
<?php
// Verbindung zur Firebird-Datenbank herstellen
$dbh = ibase_connect('localhost:/pfad/zur/datenbank.fdb', 'SYSDBA', 'masterkey');
// Abfrage, die eine BLOB-Spalte enthält
$result = ibase_query($dbh, 'SELECT ID, DOKUMENT FROM DOKUMENTE WHERE ID = 1');
$row = ibase_fetch_object($result);
// BLOB öffnen
$blob_handle = ibase_blob_open($dbh, $row->DOKUMENT);
if ($blob_handle === false) {
die('BLOB konnte nicht geöffnet werden.');
}
// BLOB-Daten in Chunks von 8192 Bytes lesen
$blob_data = '';
while ($chunk = ibase_blob_get($blob_handle, 8192)) {
$blob_data .= $chunk;
}
// BLOB schließen
ibase_blob_close($blob_handle);
echo 'BLOB-Größe: ' . strlen($blob_data) . ' Bytes';
ibase_close($dbh);
?>
BLOB-Inhalt als Datei-Download bereitstellen
<?php
$dbh = ibase_connect('localhost:/daten/dokumente.fdb', 'SYSDBA', 'masterkey');
$result = ibase_query($dbh, "SELECT DATEINAME, INHALT FROM DATEIEN WHERE ID = 42");
$row = ibase_fetch_assoc($result);
$blob_handle = ibase_blob_open($dbh, $row['INHALT']);
if ($blob_handle === false) {
http_response_code(500);
die('Fehler beim Öffnen des BLOBs.');
}
// HTTP-Header für Dateidownload setzen
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="' . basename($row['DATEINAME']) . '"');
// BLOB direkt in den Ausgabepuffer schreiben
while ($chunk = ibase_blob_get($blob_handle, 8192)) {
echo $chunk;
}
ibase_blob_close($blob_handle);
ibase_close($dbh);
?>
// Wichtig · Fallstricke
Deprecation: Die ibase_*-Funktionen wurden in PHP 8.0 aus dem PHP-Core entfernt. Für PHP 8 und höher muss die PECL-Erweiterung ibase separat installiert werden. Für neue Projekte empfiehlt sich der Einsatz moderner Datenbanktreiber.
Ressourcenverwaltung: Jeder mit ibase_blob_open() geöffnete BLOB-Handle sollte nach der Verwendung unbedingt mit ibase_blob_close() geschlossen werden, um Speicherlecks zu vermeiden – insbesondere in Schleifen oder bei der Verarbeitung vieler Datensätze.
Schreibzugriff: ibase_blob_open() öffnet BLOBs nur zum Lesen. Zum Erstellen neuer BLOBs oder zum Schreiben muss ibase_blob_create() verwendet werden.