Signatur
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
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);
?>
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);
?>
// 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.