Signatur
Beschreibung
ocisavelobfile() ist ein Alias der Methode OCILob::import() und dient dazu, den Inhalt einer lokalen Datei direkt in ein Oracle-LOB-Objekt (CLOB, BLOB oder NCLOB) zu importieren. Dies ist nützlich, wenn große Datenmengen — etwa Bilder, Dokumente oder XML-Dateien — effizient in eine Oracle-Datenbank gespeichert werden sollen.
Der Aufruf öffnet die angegebene lokale Datei, liest ihren Inhalt und schreibt ihn in das LOB-Objekt, das zuvor über eine Oracle-Verbindung und eine entsprechende SQL-Anweisung (z. B. mit RETURNING ... INTO) erzeugt wurde. Anschließend sollte die Transaktion mit oci_commit() abgeschlossen werden.
Da es sich um einen veralteten Alias handelt, sollte in neuem Code bevorzugt OCILob::import() direkt verwendet werden. Die Funktion ocisavelobfile() steht unter Umständen je nach PHP-Konfiguration und OCI8-Extension-Version nicht zur Verfügung.
Achtung: Diese Funktion (wie alle oci*-Alias-Funktionen) gilt als veraltet und kann in zukünftigen PHP-Versionen entfernt werden. Der Einsatz der OOP-Schnittstelle über OCILob::import() wird dringend empfohlen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $lob Pflicht | OCILob | Das LOB-Objekt (Instanz von OCILob), in das der Dateiinhalt geschrieben werden soll. Es wird typischerweise über oci_new_descriptor() erzeugt. |
|
| $filename Pflicht | string | Pfad zur lokalen Datei, deren Inhalt in das LOB-Objekt importiert werden soll. Der Pfad muss für den PHP-Prozess lesbar sein. |
Rückgabewert
true zurück, wenn der Import erfolgreich war, andernfalls false.Beispiele
Bild als BLOB in Oracle-Datenbank speichern
<?php
// Verbindung zur Oracle-Datenbank herstellen
$conn = oci_connect('benutzer', 'passwort', 'localhost/XE');
if (!$conn) {
$e = oci_error();
trigger_error(htmlentities($e['message']), E_USER_ERROR);
}
// LOB-Deskriptor erzeugen
$lob = oci_new_descriptor($conn, OCI_D_LOB);
// SQL-Anweisung mit RETURNING ... INTO
$sql = "INSERT INTO dokumente (id, dateiinhalt) VALUES (dokumente_seq.NEXTVAL, EMPTY_BLOB()) RETURNING dateiinhalt INTO :lob";
$stmt = oci_parse($conn, $sql);
// LOB-Platzhalter binden
oci_bind_by_name($stmt, ':lob', $lob, -1, OCI_B_BLOB);
// Anweisung ausführen
oci_execute($stmt, OCI_DEFAULT);
// Lokale Datei in das LOB-Objekt importieren (Alias für OCILob::import)
$ergebnis = ocisavelobfile($lob, '/pfad/zur/datei/bild.png');
if ($ergebnis) {
oci_commit($conn);
echo "Datei erfolgreich gespeichert.";
} else {
oci_rollback($conn);
echo "Fehler beim Speichern der Datei.";
}
// Ressourcen freigeben
$lob->free();
oci_free_statement($stmt);
oci_close($conn);
Empfohlene Alternative mit OCILob::import()
<?php
// Verbindung herstellen
$conn = oci_connect('benutzer', 'passwort', 'localhost/XE');
if (!$conn) {
$e = oci_error();
trigger_error(htmlentities($e['message']), E_USER_ERROR);
}
$lob = oci_new_descriptor($conn, OCI_D_LOB);
$sql = "INSERT INTO dokumente (id, inhalt) VALUES (dok_seq.NEXTVAL, EMPTY_CLOB()) RETURNING inhalt INTO :lob";
$stmt = oci_parse($conn, $sql);
oci_bind_by_name($stmt, ':lob', $lob, -1, OCI_B_CLOB);
oci_execute($stmt, OCI_DEFAULT);
// Bevorzugte OOP-Methode statt ocisavelobfile()
if ($lob->import('/pfad/zur/datei/text.txt')) {
oci_commit($conn);
echo "CLOB erfolgreich importiert.";
} else {
oci_rollback($conn);
echo "Fehler beim Import.";
}
$lob->free();
oci_free_statement($stmt);
oci_close($conn);
// Wichtig · Fallstricke
Deprecation-Hinweis: ocisavelobfile() ist ein veralteter Alias. Seit PHP 8.0 wurden viele OCI8-Alias-Funktionen überarbeitet oder entfernt. Es wird dringend empfohlen, stattdessen die objektorientierte Methode OCILob::import() zu verwenden, um Kompatibilität mit zukünftigen PHP-Versionen zu gewährleisten.
Sicherheitshinweis: Der Dateipfad, der an diese Funktion übergeben wird, sollte niemals direkt aus Benutzereingaben stammen, ohne gründliche Validierung. Ansonsten besteht die Gefahr von Path-Traversal-Angriffen, bei denen sensible Systemdateien in die Datenbank hochgeladen werden könnten.
Stellen Sie außerdem sicher, dass oci_execute() mit OCI_DEFAULT aufgerufen wird (kein automatisches Commit), damit das LOB vollständig geschrieben werden kann, bevor die Transaktion mit oci_commit() abgeschlossen wird.