Start · Sprachen · PHP · Referenz · ocisavelobfile

ocisavelobfile

Funktion

Alias von <code>OCILob::import()</code> — lädt den Inhalt einer lokalen Datei in ein OCI-LOB-Objekt (Oracle Large Object).

Kategorie: db

Signatur

ocisavelobfile(OCILob $lob, string $filename): bool

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

Typ
bool
Beschreibung
Gibt 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);
Datei erfolgreich gespeichert.

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);
CLOB erfolgreich importiert.

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