Start · Sprachen · PHP · Referenz · ociwritelobtofile

ociwritelobtofile

Funktion

Veralteter Alias von <code>OCILob::export()</code> — schreibt den Inhalt eines Oracle LOB-Objekts in eine lokale Datei.

seit PHP 4.0.0 Kategorie: db

Signatur

ociwritelobtofile(OCILob $lob, string $filename, int $start = -1, int $length = -1): bool

Beschreibung

ociwritelobtofile() ist ein veralteter Alias für die Methode OCILob::export(). Die Funktion liest den Inhalt eines Oracle Large Object (LOB) — also eines CLOB, NCLOB oder BLOB — und schreibt ihn in eine lokale Datei auf dem Server-Dateisystem.

Der optionale Parameter start ermöglicht es, ab einem bestimmten Byte-Offset im LOB zu beginnen, während length die maximale Anzahl zu lesender Bytes begrenzt. Werden diese Parameter weggelassen oder auf -1 gesetzt, wird der gesamte LOB-Inhalt exportiert.

Diese Funktion ist nützlich, wenn große binäre oder textuelle Daten aus einer Oracle-Datenbank direkt in eine Datei gespeichert werden sollen, ohne sie vollständig in den PHP-Arbeitsspeicher laden zu müssen — was bei sehr großen LOBs effizienter ist.

Achtung: Diese Funktion ist seit PHP 8.0 als veraltet (deprecated) markiert. Neuer Code sollte stattdessen die objektorientierte Methode OCILob::export() verwenden.

Parameter

Name Typ Default Beschreibung
$lob Pflicht OCILob Ein gültiges LOB-Deskriptor-Objekt, das z. B. durch oci_new_descriptor() oder aus einer OCI-Abfrage zurückgegeben wurde.
$filename Pflicht string Pfad zur Zieldatei auf dem Server-Dateisystem, in die der LOB-Inhalt geschrieben wird. Die Datei wird erstellt oder überschrieben.
$start int -1 Byte-Offset im LOB, ab dem gelesen werden soll. -1 bedeutet: vom Anfang des LOB starten.
$length int -1 Maximale Anzahl Bytes, die aus dem LOB gelesen werden. -1 bedeutet: bis zum Ende des LOB lesen.

Rückgabewert

Typ
bool
Beschreibung
Gibt true bei Erfolg zurück, false bei einem Fehler (z. B. wenn die Datei nicht geschrieben werden konnte oder der LOB-Deskriptor ungültig ist).

Beispiele

BLOB aus Oracle-Datenbank in Datei exportieren

<?php
$conn = oci_connect('user', 'password', 'localhost/XE');
if (!$conn) {
    $e = oci_error();
    trigger_error($e['message'], E_USER_ERROR);
}

$sql = 'SELECT bild FROM produkte WHERE id = :id';
$stmt = oci_parse($conn, $sql);
oci_bind_by_name($stmt, ':id', $produktId);
$produktId = 42;
oci_execute($stmt);

$row = oci_fetch_assoc($stmt);
if ($row && $row['BILD'] instanceof OCILob) {
    $lob = $row['BILD'];
    $zieldatei = '/tmp/produkt_42.jpg';

    // Veralteter Alias — besser: $lob->export($zieldatei)
    if (ociwritelobtofile($lob, $zieldatei)) {
        echo "Bild erfolgreich gespeichert: $zieldatei";
    } else {
        echo "Fehler beim Speichern des LOB.";
    }
    $lob->free();
}

oci_free_statement($stmt);
oci_close($conn);
?>
Bild erfolgreich gespeichert: /tmp/produkt_42.jpg

Moderner Ersatz mit OCILob::export()

<?php
// Empfohlener, moderner Ansatz statt ociwritelobtofile()
$conn = oci_connect('user', 'password', 'localhost/XE');
$sql = 'SELECT dokument FROM dateien WHERE id = :id';
$stmt = oci_parse($conn, $sql);
$id = 7;
oci_bind_by_name($stmt, ':id', $id);
oci_execute($stmt);

$row = oci_fetch_assoc($stmt);
if ($row && $row['DOKUMENT'] instanceof OCILob) {
    $lob = $row['DOKUMENT'];
    // OOP-Methode: OCILob::export()
    if ($lob->export('/var/export/dokument_7.pdf')) {
        echo "Export erfolgreich.";
    } else {
        echo "Export fehlgeschlagen.";
    }
    $lob->free();
}

oci_free_statement($stmt);
oci_close($conn);
?>
Export erfolgreich.

// Wichtig · Fallstricke

Deprecated: ociwritelobtofile() ist ein veralteter Alias und sollte in neuem Code nicht mehr verwendet werden. Verwende stattdessen die Methode OCILob::export() direkt auf dem LOB-Objekt.

Sicherheit: Der Zieldatei-Pfad (filename) sollte niemals direkt aus Benutzereingaben übernommen werden, um Path-Traversal-Angriffe zu verhindern. Validiere und bereinige den Pfad stets serverseitig.

Dateiberechtigungen: Der PHP-Prozess benötigt Schreibrechte auf das Zielverzeichnis. Andernfalls schlägt die Funktion stillschweigend fehl und gibt false zurück.