Signatur
Beschreibung
fbird_blob_info() liefert detaillierte Metadaten zu einem BLOB-Objekt in einer Firebird- oder InterBase-Datenbank. Übergeben werden eine aktive Datenbankverbindung und die BLOB-ID, wie sie z. B. nach einem SELECT oder nach dem Erzeugen eines BLOBs vorliegt.
Die Funktion gibt ein assoziatives Array zurück, das typischerweise die Felder length (Gesamtlänge in Bytes), numseg (Anzahl der Segmente) sowie maxseg (maximale Segmentgröße) enthält. Diese Informationen eignen sich besonders, um vor dem eigentlichen Lesen des BLOBs Speicherbedarf abzuschätzen oder Segmentierungslogik zu steuern.
Die Funktion ist ein Alias für ibase_blob_info() und gehört zur InterBase/Firebird-Erweiterung (ibase). Sie ist besonders nützlich, wenn große BLOBs (z. B. Dokumente, Bilder) in Segmenten gelesen werden sollen und man zunächst die Größe prüfen möchte.
Hinweis: Die InterBase/Firebird-Erweiterung wurde in PHP 8.0 aus dem PHP-Kern entfernt. Für aktuelle Projekte steht die PECL-Erweiterung ibase oder alternativ Firebird PDO zur Verfügung.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $link_identifier Pflicht | resource | Eine aktive Firebird/InterBase-Datenbankverbindung, wie sie von fbird_connect() oder fbird_pconnect() zurückgegeben wird. |
|
| $blob_id Pflicht | string | Die ID des BLOBs, zu dem Informationen abgerufen werden sollen. Diese ID wird z. B. bei der Erstellung eines BLOBs mit fbird_blob_create() oder beim SELECT eines BLOB-Feldes erhalten. |
Rückgabewert
length (Gesamtgröße in Bytes), numseg (Anzahl der Segmente) und maxseg (maximale Segmentgröße in Bytes). Im Fehlerfall wird false zurückgegeben.Beispiele
BLOB-Informationen auslesen und ausgeben
<?php
// Verbindung zur Firebird-Datenbank herstellen
$dbh = fbird_connect('localhost:/var/lib/firebird/data/meine.fdb', 'sysdba', 'masterkey');
if (!$dbh) {
die('Verbindungsfehler: ' . ibase_errmsg());
}
// Datensatz mit BLOB-Feld abfragen
$result = fbird_query($dbh, 'SELECT DOKUMENT_ID, INHALT FROM DOKUMENTE WHERE DOKUMENT_ID = 1');
$row = fbird_fetch_object($result);
// BLOB-Informationen abrufen
$info = fbird_blob_info($dbh, $row->INHALT);
if ($info !== false) {
echo 'Gesamtgröße: ' . $info['length'] . ' Bytes' . PHP_EOL;
echo 'Segmentanzahl: ' . $info['numseg'] . PHP_EOL;
echo 'Max. Segmentgröße: ' . $info['maxseg'] . ' Bytes' . PHP_EOL;
} else {
echo 'Fehler beim Abrufen der BLOB-Informationen.';
}
fbird_free_result($result);
fbird_close($dbh);
?>
BLOB-Größe vor dem Lesen prüfen
<?php
$dbh = fbird_connect('localhost:/var/lib/firebird/data/meine.fdb', 'sysdba', 'masterkey');
$result = fbird_query($dbh, 'SELECT BILD_ID, BILDDATEN FROM BILDER WHERE BILD_ID = 42');
$row = fbird_fetch_assoc($result);
$info = fbird_blob_info($dbh, $row['BILDDATEN']);
// Nur BLOBs unter 5 MB direkt in den Speicher laden
$maxGroesse = 5 * 1024 * 1024; // 5 MB
if ($info !== false && $info['length'] <= $maxGroesse) {
$blob = fbird_blob_open($dbh, $row['BILDDATEN']);
$inhalt = '';
while ($segment = fbird_blob_get($blob, $info['maxseg'])) {
$inhalt .= $segment;
}
fbird_blob_close($blob);
echo 'BLOB geladen, Größe: ' . strlen($inhalt) . ' Bytes';
} else {
echo 'BLOB zu groß für direktes Laden (' . ($info['length'] ?? 'unbekannt') . ' Bytes).';
}
fbird_free_result($result);
fbird_close($dbh);
?>
// Wichtig · Fallstricke
Deprecation / Entfernung: Die ibase-Erweiterung (und damit fbird_blob_info()) wurde mit PHP 8.0 aus dem offiziellen PHP-Kern entfernt. Sie steht seitdem nur noch als PECL-Paket zur Verfügung. Für neue Projekte empfiehlt sich die Verwendung von PDO mit dem Firebird-Treiber.
fbird_blob_info() ist ein direkter Alias für ibase_blob_info(). Beide Funktionen sind identisch in Verhalten und Rückgabewert.
Die genauen Schlüsselnamen des zurückgegebenen Arrays können je nach PHP-Version und Plattform leicht variieren. Es empfiehlt sich, den Rückgabewert mit var_dump() zu inspizieren, falls unerwartete Schlüsselnamen auftreten.