Start · Sprachen · PHP · Referenz · ibase_blob_open

ibase_blob_open

Funktion

Öffnet einen bestehenden BLOB in einer Firebird/InterBase-Datenbank zum sequenziellen Lesen von Datenteilen.

seit PHP 5.0.0 Kategorie: db

Signatur

ibase_blob_open(resource $link_identifier, string $blob_id): resource|false

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

Typ
resource|false
Beschreibung
Gibt im Erfolgsfall ein BLOB-Handle (Ressource) zurück, das mit 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-Größe: 204800 Bytes

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.