Signatur
Beschreibung
ibase_blob_info() fragt die Metadaten eines BLOB-Objekts in einer Firebird- oder InterBase-Datenbank ab. Die Funktion liefert ein Array mit Informationen wie der Gesamtlänge des BLOBs in Bytes, der Anzahl der internen Segmente sowie der maximalen Segmentgröße.
BLOBs (Binary Large Objects) werden in Firebird/InterBase verwendet, um große Datenmengen wie Bilder, Dokumente oder anderweitig umfangreiche Binär- oder Textdaten zu speichern. Bevor man einen BLOB liest oder verarbeitet, kann es sinnvoll sein, zunächst seine Größe zu ermitteln, um Speicher- oder Zeitprobleme zu vermeiden.
Die Funktion erwartet eine aktive Datenbankverbindung ($link_identifier) und die eindeutige BLOB-ID ($blob_id), die üblicherweise aus einem Abfrageergebnis stammt. Im Erfolgsfall gibt sie ein assoziatives Array zurück; bei einem Fehler wird false zurückgegeben.
Hinweis: Die ibase_*-Funktionen wurden in PHP 8.0 aus dem Kern entfernt. Für PHP 8.0 und höher muss die PECL-Erweiterung ibase oder alternativ Firebird verwendet werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $link_identifier Pflicht | resource | Eine aktive Firebird/InterBase-Datenbankverbindung, die z. B. mit ibase_connect() oder ibase_pconnect() geöffnet wurde. |
|
| $blob_id Pflicht | string | Die eindeutige ID des BLOBs, zu dem Informationen abgerufen werden sollen. Diese ID stammt typischerweise aus einem Datenbankabfrageergebnis. |
Rückgabewert
Im Erfolgsfall wird ein Array mit folgenden Schlüsseln zurückgegeben:
length– Gesamtlänge des BLOBs in Bytes.seg_count– Anzahl der Segmente, in die der BLOB intern aufgeteilt ist.max_seg– Größe des größten Segments in Bytes.type– BLOB-Typ (0 = binär, 1 = Text).
Im Fehlerfall wird false zurückgegeben.
Beispiele
Metadaten eines BLOBs abrufen
<?php
// Verbindung zur Firebird-Datenbank herstellen
$dbh = ibase_connect('/var/lib/firebird/data/meinedatenbank.fdb', 'SYSDBA', 'masterkey');
// Datensatz mit BLOB-Feld abrufen
$result = ibase_query($dbh, 'SELECT DOKUMENT FROM DATEIEN WHERE ID = 1');
$row = ibase_fetch_object($result);
// BLOB-Informationen auslesen
$blob_id = $row->DOKUMENT;
$info = ibase_blob_info($dbh, $blob_id);
if ($info !== false) {
echo "BLOB-Länge: " . $info['length'] . " Bytes\n";
echo "Segmentanzahl: " . $info['seg_count'] . "\n";
echo "Max. Segmentgröße: " . $info['max_seg'] . " Bytes\n";
echo "Typ: " . ($info['type'] === 0 ? 'Binär' : 'Text') . "\n";
} else {
echo "Fehler beim Abrufen der BLOB-Informationen.\n";
}
ibase_free_result($result);
ibase_close($dbh);
?>
BLOB vor dem Lesen auf Größe prüfen
<?php
$dbh = ibase_connect('/var/lib/firebird/data/meinedatenbank.fdb', 'SYSDBA', 'masterkey');
$result = ibase_query($dbh, 'SELECT BILD FROM PRODUKTE WHERE ID = 42');
$row = ibase_fetch_object($result);
$blob_id = $row->BILD;
$info = ibase_blob_info($dbh, $blob_id);
$maxGroesse = 5 * 1024 * 1024; // 5 MB Limit
if ($info !== false && $info['length'] <= $maxGroesse) {
// BLOB öffnen und lesen
$blob = ibase_blob_open($dbh, $blob_id);
$daten = '';
while ($segment = ibase_blob_get($blob, 4096)) {
$daten .= $segment;
}
ibase_blob_close($blob);
echo "BLOB erfolgreich gelesen. Größe: " . strlen($daten) . " Bytes\n";
} else {
echo "BLOB ist zu groß oder konnte nicht abgerufen werden.\n";
}
ibase_free_result($result);
ibase_close($dbh);
?>
// Wichtig · Fallstricke
Deprecation / Entfernung: Die ibase_*-Erweiterung wurde in PHP 7.4 als veraltet markiert und in PHP 8.0 vollständig aus dem PHP-Kern entfernt. Für PHP 8.0+ steht die PECL-Erweiterung ibase oder die Firebird-PDO-Erweiterung (pdo_firebird) zur Verfügung.
Bei sehr großen BLOBs empfiehlt es sich, ibase_blob_info() vorab zu nutzen, um den Speicherbedarf abzuschätzen und Out-of-Memory-Fehler zu vermeiden. Lese BLOBs in solchen Fällen segmentweise mit ibase_blob_get().