Start · Sprachen · PHP · Referenz · ibase_blob_import

ibase_blob_import

Funktion

Erstellt ein Firebird/InterBase-BLOB, schreibt den Inhalt eines geöffneten Datei-Handles hinein und gibt die BLOB-ID zurück.

seit PHP 5.0.0 Kategorie: db

Signatur

ibase_blob_import(resource $link_identifier, resource $file_handle): string|false

Beschreibung

ibase_blob_import() ist eine Komfort-Funktion, die drei Schritte in einem erledigt: Sie öffnet intern ein neues BLOB auf dem Datenbankserver, überträgt sämtliche Daten aus dem übergebenen PHP-Datei-Handle in dieses BLOB und schließt es danach automatisch. Als Ergebnis liefert sie die opake BLOB-ID zurück, die direkt in einem INSERT- oder UPDATE-Statement verwendet werden kann.

Damit eignet sich die Funktion besonders dann, wenn binäre oder große Textdaten (Bilder, Dokumente, XML-Dateien) aus dem Dateisystem in eine Firebird- oder InterBase-Datenbank importiert werden sollen, ohne die drei separaten Schritte ibase_blob_create(), ibase_blob_add() und ibase_blob_close() manuell zu durchlaufen.

Das zurückgegebene BLOB-ID-Handle muss anschließend in einem parametrisierten Statement an die Datenbank übergeben werden. Ein direktes Einbetten in einen SQL-String ist nicht möglich und auch nicht sicher.

Hinweis: Die gesamte ibase_*-Extension wurde mit PHP 8.0 aus dem PHP-Kern entfernt und steht seitdem nur noch über die PECL-Extension ibase bzw. FirebirdClient zur Verfügung.

Parameter

Name Typ Default Beschreibung
$link_identifier Pflicht resource Eine aktive Datenbankverbindung, die zuvor mit ibase_connect() oder ibase_pconnect() geöffnet wurde. Bestimmt, auf welchem Datenbankserver das BLOB angelegt wird.
$file_handle Pflicht resource Ein geöffnetes PHP-Datei-Handle (z. B. von fopen()). Der gesamte Inhalt ab der aktuellen Leseposition wird in das neue BLOB übertragen.

Rückgabewert

Typ
string|false
Beschreibung
Bei Erfolg eine opake BLOB-ID (als String), die direkt als Parameterwert in einem Firebird-SQL-Statement verwendet werden kann. Im Fehlerfall wird false zurückgegeben.

Beispiele

Bilddatei in eine Firebird-Datenbank importieren

<?php
// Datenbankverbindung herstellen
$dbh = ibase_connect('localhost:/var/db/beispiel.fdb', 'sysdba', 'masterkey');

// Datei öffnen, die als BLOB gespeichert werden soll
$fileHandle = fopen('/pfad/zum/bild.jpg', 'rb');
if ($fileHandle === false) {
    die('Datei konnte nicht geöffnet werden.');
}

// BLOB erstellen und Dateiinhalt importieren
$blobId = ibase_blob_import($dbh, $fileHandle);
fclose($fileHandle);

if ($blobId === false) {
    die('BLOB-Import fehlgeschlagen.');
}

// BLOB-ID in einem INSERT-Statement verwenden
$stmt = ibase_prepare($dbh, 'INSERT INTO bilder (name, daten) VALUES (?, ?)');
ibase_execute($stmt, 'bild.jpg', $blobId);

echo 'Bild erfolgreich importiert.';
ibase_close($dbh);
?>
Bild erfolgreich importiert.

Großes Textdokument als BLOB aktualisieren

<?php
$dbh = ibase_connect('localhost:/var/db/dokumente.fdb', 'sysdba', 'masterkey');

$fh = fopen('/var/dokumente/vertrag_2024.txt', 'rb');
if (!$fh) {
    die('Dokument nicht lesbar.');
}

$blobId = ibase_blob_import($dbh, $fh);
fclose($fh);

if ($blobId !== false) {
    $stmt = ibase_prepare($dbh, 'UPDATE dokumente SET inhalt = ? WHERE id = ?');
    ibase_execute($stmt, $blobId, 42);
    echo 'Dokument (ID 42) erfolgreich aktualisiert.';
} else {
    echo 'Fehler beim BLOB-Import.';
}

ibase_close($dbh);
?>
Dokument (ID 42) erfolgreich aktualisiert.

// Wichtig · Fallstricke

Deprecation / Entfernung: Die ibase_*-Funktionen wurden in PHP 7.4 als veraltet markiert (deprecated) und in PHP 8.0 vollständig aus dem PHP-Core entfernt. Für PHP 8.x ist die PECL-Extension ibase bzw. FirebirdClient erforderlich.

Dateizeiger-Position: Die Funktion liest ab der aktuellen Position des Datei-Handles. Wurde der Zeiger bereits durch andere Lese-Operationen verschoben, sollte vor dem Aufruf rewind($fileHandle) verwendet werden, um sicherzustellen, dass der gesamte Dateiinhalt übertragen wird.

Speicher: Bei sehr großen Dateien sollte die Speicher- und Zeitlimitkonfiguration von PHP (memory_limit, max_execution_time) geprüft werden, da die gesamten Daten über PHP in die Datenbank übertragen werden.