Start · Sprachen · PHP · Referenz · ibase_blob_info

ibase_blob_info

Funktion

Gibt Länge und andere Metadaten eines Firebird/InterBase-BLOBs anhand seiner ID zurück.

seit PHP 5.0.0 Kategorie: db

Signatur

ibase_blob_info(resource $link_identifier, string $blob_id): array|false

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

Typ
array|false
Beschreibung

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-Länge: 204800 Bytes Segmentanzahl: 50 Max. Segmentgröße: 4096 Bytes Typ: Binär

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);
?>
BLOB erfolgreich gelesen. Größe: 102400 Bytes

// 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().