Start · Sprachen · PHP · Referenz · fbird_blob_info

fbird_blob_info

Funktion

Gibt Metainformationen (Größe, Segmentanzahl usw.) zu einem Firebird/InterBase-BLOB-Feld zurück.

seit PHP 5.0.0 Kategorie: db

Signatur

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

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

Typ
array|false
Beschreibung
Gibt bei Erfolg ein Array mit BLOB-Metadaten zurück. Das Array enthält typischerweise die Schlüssel 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);
?>
Gesamtgröße: 204800 Bytes Segmentanzahl: 50 Max. Segmentgröße: 4096 Bytes

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);
?>
BLOB geladen, Größe: 102400 Bytes

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