Start · Sprachen · PHP · Referenz · cubrid_lob2_export

cubrid_lob2_export

Funktion

Exportiert den Inhalt eines CUBRID-LOB-Objekts (<code>BLOB</code> oder <code>CLOB</code>) direkt in eine lokale Datei.

seit PHP 5.3.1 Kategorie: db

Signatur

cubrid_lob2_export(resource $lob_identifier, string $file_name): bool

Beschreibung

cubrid_lob2_export() liest den Inhalt eines zuvor mit cubrid_lob2_new() oder aus einer Abfrage stammenden LOB-Objekts und schreibt ihn vollständig in die angegebene Datei auf dem lokalen Dateisystem. Dies ist besonders nützlich, wenn große Binär- oder Textdaten (z. B. Bilder, PDFs oder lange Textdokumente) effizient aus der CUBRID-Datenbank extrahiert werden sollen, ohne den gesamten Inhalt zunächst in den PHP-Speicher zu laden.

Der Dateiname wird neu erstellt oder überschrieben, falls er bereits existiert. Die Funktion arbeitet intern mit einem Stream und ist daher auch für sehr große LOB-Objekte geeignet, bei denen ein direktes Lesen in einen String (cubrid_lob2_read()) zu Speicherproblemen führen könnte.

Vor dem Aufruf dieser Funktion muss ein gültiges LOB-Handle vorhanden sein. Dieses wird entweder durch cubrid_lob2_new() erzeugt oder stammt aus einem mit cubrid_fetch() / cubrid_lob2_bind() gelesenen Resultset. Nach der Verwendung sollte das LOB-Objekt mit cubrid_lob2_close() freigegeben werden.

Beachte, dass der Schreibzeiger des LOB-Objekts nach dem Export am Ende des Datenstroms steht. Ein erneuter Export erfordert ein Zurücksetzen mit cubrid_lob2_seek() oder cubrid_lob2_seek64().

Parameter

Name Typ Default Beschreibung
$lob_identifier Pflicht resource Ein gültiges LOB-Handle, das durch cubrid_lob2_new() oder durch das Lesen aus einem CUBRID-Resultset erzeugt wurde.
$file_name Pflicht string Pfad zur Zieldatei auf dem lokalen Dateisystem, in die der LOB-Inhalt geschrieben wird. Die Datei wird erstellt oder überschrieben.

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn der Export erfolgreich war. Bei einem Fehler (ungültiges LOB-Handle, Schreibrechte fehlen o. ä.) wird false zurückgegeben.

Beispiele

BLOB-Datenbankinhalt in eine lokale Datei exportieren

<?php
$conn = cubrid_connect('localhost', 33000, 'demodb', 'dba', '');
if (!$conn) {
    die('Verbindung fehlgeschlagen: ' . cubrid_error());
}

$req = cubrid_execute($conn, "SELECT bild FROM produkte WHERE id = 42");
if ($req) {
    $row = cubrid_fetch($req, CUBRID_LOB);
    if ($row && isset($row[0])) {
        $lob = $row[0];
        $zieldatei = '/var/export/produkt_42.jpg';

        if (cubrid_lob2_export($lob, $zieldatei)) {
            echo 'LOB erfolgreich exportiert nach: ' . $zieldatei;
        } else {
            echo 'Export fehlgeschlagen.';
        }

        cubrid_lob2_close($lob);
    }
    cubrid_close_request($req);
}

cubrid_disconnect($conn);
?>
LOB erfolgreich exportiert nach: /var/export/produkt_42.jpg

Neu erstelltes LOB exportieren nach dem Import einer Datei

<?php
$conn = cubrid_connect('localhost', 33000, 'demodb', 'dba', '');

// Neues BLOB-Objekt anlegen und Datei importieren
$lob = cubrid_lob2_new($conn, 'BLOB');
cubrid_lob2_import($lob, '/tmp/dokument.pdf');

// LOB-Zeiger zurücksetzen und anschließend exportieren
cubrid_lob2_seek($lob, 0, CUBRID_CURSOR_FIRST);

if (cubrid_lob2_export($lob, '/var/backup/dokument_backup.pdf')) {
    echo 'Backup des LOB-Objekts erfolgreich erstellt.';
} else {
    echo 'Fehler beim Exportieren des LOB-Objekts.';
}

cubrid_lob2_close($lob);
cubrid_disconnect($conn);
?>
Backup des LOB-Objekts erfolgreich erstellt.

// Wichtig · Fallstricke

Sicherheitshinweis: Der Zieldateipfad sollte niemals direkt aus Benutzereingaben stammen, da dies zu Path-Traversal-Angriffen führen kann (z. B. ../../etc/passwd als Dateiname). Validiere und bereinige den Pfad stets serverseitig.

Dateiberechtigungen: Der PHP-Prozess benötigt Schreibrechte auf das Zielverzeichnis. Fehlen diese, gibt die Funktion false zurück, ohne eine spezifische Fehlermeldung auszugeben. Überprüfe die Verzeichnisrechte bei Problemen.

Zeigerposition: Nach dem Export befindet sich der interne Lesezeiger des LOB-Objekts am Ende. Soll dasselbe LOB-Objekt erneut exportiert oder gelesen werden, muss der Zeiger mit cubrid_lob2_seek() zurückgesetzt werden.