Start · Sprachen · PHP · Referenz · cubrid_save_to_glo

cubrid_save_to_glo

Funktion

Speichert den Inhalt einer lokalen Datei in einer CUBRID-GLO-Instanz (Generalized Large Object).

seit PHP 8.3.0 Kategorie: db

Signatur

cubrid_save_to_glo(resource $conn_identifier, string $oid, string $file_name): int

Beschreibung

cubrid_save_to_glo liest den Inhalt einer lokalen Datei und schreibt ihn in eine bestehende GLO-Instanz (Generalized Large Object) in einer CUBRID-Datenbank. GLOs sind ein CUBRID-spezifischer Mechanismus zur Speicherung großer Binärdaten (ähnlich BLOBs) als eigenständige Datenbankobjekte.

Die Funktion wird eingesetzt, wenn große Dateien – etwa Bilder, Videos oder Dokumente – direkt in der Datenbank persistiert werden sollen, ohne sie zuvor in ein Byte-Array konvertieren zu müssen. Als Voraussetzung muss die GLO-Instanz bereits existieren und über ihre OID (Object Identifier) referenzierbar sein.

Der Ablauf ist typischerweise: zuerst eine neue GLO-Instanz mit cubrid_new_glo anlegen, die zurückgegebene OID merken und anschließend mit cubrid_save_to_glo die gewünschte Datei in diese Instanz speichern.

Hinweis: Diese Funktion ist veraltet und wurde aus dem CUBRID PHP-Treiber in neueren Versionen entfernt. Für aktuelle Projekte sollten stattdessen CUBRID-BLOBs und CLOBs verwendet werden.

Parameter

Name Typ Default Beschreibung
$conn_identifier Pflicht resource Eine gültige CUBRID-Verbindungsressource, wie sie von cubrid_connect zurückgegeben wird.
$oid Pflicht string Die OID (Object Identifier) der Ziel-GLO-Instanz, in die der Dateiinhalt geschrieben werden soll. Die OID muss zuvor mit cubrid_new_glo erzeugt worden sein.
$file_name Pflicht string Der vollständige Dateipfad zur lokalen Quelldatei, deren Inhalt in die GLO-Instanz gespeichert werden soll.

Rückgabewert

Typ
int
Beschreibung
Gibt 1 zurück, wenn die Datei erfolgreich in die GLO-Instanz gespeichert wurde, oder 0 im Fehlerfall.

Beispiele

Bild in eine GLO-Instanz speichern

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

if (!$conn) {
    die('Verbindung fehlgeschlagen: ' . cubrid_error());
}

// Neue GLO-Instanz anlegen
$oid = cubrid_new_glo($conn, 'glo', '/var/www/uploads/foto.jpg');

if ($oid) {
    // Datei in die GLO-Instanz speichern
    $result = cubrid_save_to_glo($conn, $oid, '/var/www/uploads/foto.jpg');

    if ($result === 1) {
        echo 'Datei erfolgreich gespeichert. OID: ' . $oid;
    } else {
        echo 'Fehler beim Speichern der Datei.';
    }
} else {
    echo 'GLO-Instanz konnte nicht erstellt werden.';
}

cubrid_disconnect($conn);
?>
Datei erfolgreich gespeichert. OID: @0|0|0

Datei hochladen und in CUBRID-GLO ablegen

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

if (isset($_FILES['upload']) && $_FILES['upload']['error'] === UPLOAD_ERR_OK) {
    $tmpPath = $_FILES['upload']['tmp_name'];

    // Neue GLO-Instanz für den Dateityp anlegen
    $oid = cubrid_new_glo($conn, 'glo', $tmpPath);

    if ($oid) {
        $result = cubrid_save_to_glo($conn, $oid, $tmpPath);

        if ($result === 1) {
            // OID in einer Tabelle speichern
            $sql = "INSERT INTO uploads (filename, glo_oid) VALUES ('" 
                   . cubrid_real_escape_string($conn, $_FILES['upload']['name']) 
                   . "', '" . $oid . "')";
            cubrid_query($sql, $conn);
            echo 'Datei gespeichert mit OID: ' . $oid;
        }
    }
}

cubrid_disconnect($conn);
?>

// Wichtig · Fallstricke

Veraltet: cubrid_save_to_glo sowie der gesamte GLO-Mechanismus gelten als veraltet. In modernen CUBRID-PHP-Treibern (ab Version 8.4+) wurde die GLO-Unterstützung entfernt. Für neue Projekte sollten cubrid_lob2_new, cubrid_lob2_write und verwandte LOB-Funktionen verwendet werden.

Sicherheit: Beim Speichern hochgeladener Dateien sollte der Dateiinhalt vor der Ablage in der Datenbank validiert werden (MIME-Typ, Dateigröße, Dateiinhalt). Die OID sollte niemals direkt aus Benutzereingaben übernommen werden, um unbeabsichtigtes Überschreiben fremder GLO-Instanzen zu vermeiden.

Die Funktion überschreibt den bestehenden Inhalt der GLO-Instanz vollständig. Ein teilweises Aktualisieren ist nicht möglich.