Start · Sprachen · PHP · Referenz · fbird_blob_get

fbird_blob_get

Funktion

Liest eine angegebene Anzahl von Bytes aus einem geöffneten Firebird/InterBase-BLOB-Handle.

seit PHP 5.0.0 Kategorie: db

Signatur

fbird_blob_get(resource $blob_handle, int $len): string|false

Beschreibung

fbird_blob_get liest bis zu $len Bytes aus einem BLOB (Binary Large Object), das zuvor mit fbird_blob_open geöffnet wurde. Die Funktion gehört zur Firebird/InterBase-Datenbankschnittstelle von PHP und erlaubt das stückweise Einlesen großer Binär- oder Textdaten, die in BLOB-Feldern einer Firebird- oder InterBase-Datenbank gespeichert sind.

BLOBs können sehr groß sein (z. B. Bilder, Dokumente oder lange Texte). Statt den gesamten Inhalt auf einmal zu laden, kann man mit fbird_blob_get Chunk für Chunk lesen und so den Speicherverbrauch kontrollieren. Dies ist besonders nützlich bei serverseitigen Skripten, die große Dateien ausliefern oder verarbeiten.

Nach dem Lesen aller benötigten Daten sollte das BLOB-Handle mit fbird_blob_close geschlossen werden, um Ressourcen freizugeben.

Hinweis: Diese Funktion ist ein Alias für ibase_blob_get. Die fbird_*-Funktionen wurden eingeführt, um die Benennung konsistenter zu gestalten. Ab PHP 8.4 wurde die InterBase/Firebird-Erweiterung in das PECL-Paket ausgelagert.

Parameter

Name Typ Default Beschreibung
$blob_handle Pflicht resource Ein gültiges BLOB-Handle, das mit fbird_blob_open geöffnet wurde.
$len Pflicht int Die maximale Anzahl von Bytes, die aus dem BLOB gelesen werden sollen.

Rückgabewert

Typ
string|false
Beschreibung
Gibt einen String mit den gelesenen Bytes zurück. Wenn keine weiteren Daten verfügbar sind oder ein Fehler auftritt, wird false zurückgegeben.

Beispiele

BLOB-Inhalt vollständig auslesen und ausgeben

<?php
$dbh = fbird_connect('localhost:/path/to/database.fdb', 'SYSDBA', 'masterkey');

$result = fbird_query($dbh, 'SELECT MEIN_BLOB_FELD FROM MEINE_TABELLE WHERE ID = 1');
$row = fbird_fetch_object($result);

// BLOB öffnen
$blob_handle = fbird_blob_open($dbh, $row->MEIN_BLOB_FELD);

$inhalt = '';
// BLOB in Chunks von 8192 Bytes lesen
while ($chunk = fbird_blob_get($blob_handle, 8192)) {
    $inhalt .= $chunk;
}

fbird_blob_close($blob_handle);
fbird_free_result($result);
fbird_close($dbh);

echo $inhalt;
?>

BLOB-Inhalt als Datei-Download streamen

<?php
$dbh = fbird_connect('localhost:/path/to/database.fdb', 'SYSDBA', 'masterkey');

$result = fbird_query($dbh, 'SELECT DATEI_BLOB FROM DATEIEN WHERE ID = 42');
$row = fbird_fetch_object($result);

$blob_handle = fbird_blob_open($dbh, $row->DATEI_BLOB);

header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="datei.bin"');

// Direkt in den Output-Buffer schreiben
while ($chunk = fbird_blob_get($blob_handle, 4096)) {
    echo $chunk;
}

fbird_blob_close($blob_handle);
fbird_free_result($result);
fbird_close($dbh);
?>

// Wichtig · Fallstricke

Ressourcen-Management: Stellen Sie sicher, dass fbird_blob_close nach dem Lesen immer aufgerufen wird, auch im Fehlerfall. Andernfalls können Datenbankverbindungen und Ressourcen verloren gehen.

Chunk-Größe: Die Wahl einer geeigneten Chunk-Größe (z. B. 4096 oder 8192 Bytes) ist wichtig. Zu kleine Werte erhöhen die Anzahl der Datenbankaufrufe; zu große Werte können den PHP-Speicher belasten.

Verfügbarkeit: fbird_blob_get ist ein Alias für ibase_blob_get. Ab PHP 8.4 wurde die integrierte InterBase/Firebird-Unterstützung aus dem PHP-Kern entfernt; die Funktion steht dann nur noch über das PECL-Paket ibase zur Verfügung.