Start · Sprachen · PHP · Referenz · cubrid_lob_send

cubrid_lob_send

Funktion

Liest BLOB- oder CLOB-Daten aus einer CUBRID-Datenbank und sendet sie direkt an den Browser-Client.

seit PHP 5.0.0 Kategorie: db

Signatur

cubrid_lob_send(resource $conn_identifier, resource $lob_identifier): bool

Beschreibung

cubrid_lob_send() überträgt den Inhalt eines BLOB- (Binary Large Object) oder CLOB- (Character Large Object) Datenbankfeldes direkt in den Ausgabepuffer von PHP und damit zum Browser. Die Funktion eignet sich besonders für das Ausliefern großer Binärdaten wie Bilder, PDFs oder Dokumente, die in einer CUBRID-Datenbank gespeichert sind, ohne diese komplett in den PHP-Arbeitsspeicher laden zu müssen.

Vor dem Aufruf dieser Funktion muss ein LOB-Ressourcen-Handle mit cubrid_lob_get() erzeugt werden. Der LOB-Inhalt wird dann direkt gestreamt, was speichereffizient ist und sich gut für große Dateien eignet.

Typischerweise wird vor dem Aufruf der passende HTTP-Header gesetzt (z. B. Content-Type und Content-Disposition), damit der Browser die gesendeten Daten korrekt interpretiert. Anschließend sollten die LOB-Ressourcen mit cubrid_lob_close() und die Verbindung mit cubrid_disconnect() freigegeben werden.

Parameter

Name Typ Default Beschreibung
$conn_identifier Pflicht resource Eine gültige CUBRID-Verbindungsressource, die mit cubrid_connect() oder cubrid_connect_with_url() erzeugt wurde.
$lob_identifier Pflicht resource Eine gültige LOB-Ressource, die mit cubrid_lob_get() aus einem BLOB- oder CLOB-Datenbankfeld abgerufen wurde.

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn die LOB-Daten erfolgreich an den Browser gesendet wurden, oder false bei einem Fehler (z. B. ungültige Ressource oder Verbindungsproblem).

Beispiele

Bild aus CUBRID-Datenbank direkt an den Browser senden

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

$sql = "SELECT bild FROM produkte WHERE id = 42";
$result = cubrid_exec($conn, $sql);

$lob = cubrid_lob_get($conn, $result);
if ($lob) {
    header('Content-Type: image/jpeg');
    header('Content-Disposition: inline; filename="produkt.jpg"');
    
    if (!cubrid_lob_send($conn, $lob)) {
        error_log('Fehler beim Senden der LOB-Daten');
    }
    
    cubrid_lob_close($lob);
}

cubrid_close_request($result);
cubrid_disconnect($conn);
?>

PDF-Dokument als Download aus CUBRID-Datenbank ausliefern

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

$dokumentId = (int) $_GET['id']; // Eingabe als Integer casten
$sql = "SELECT inhalt, dateiname FROM dokumente WHERE id = " . $dokumentId;
$result = cubrid_exec($conn, $sql);

if ($row = cubrid_fetch($result)) {
    $lob = cubrid_lob_get($conn, $result);
    if ($lob) {
        header('Content-Type: application/pdf');
        header('Content-Disposition: attachment; filename="' . basename($row['dateiname']) . '"');
        
        cubrid_lob_send($conn, $lob);
        cubrid_lob_close($lob);
    }
}

cubrid_close_request($result);
cubrid_disconnect($conn);
exit;
?>

// Wichtig · Fallstricke

Sicherheitshinweis: Benutzergesteuerte Parameter (z. B. IDs aus $_GET) dürfen niemals ungeprüft in SQL-Abfragen eingefügt werden. Verwende stets Typecasting ((int)) oder Prepared Statements, um SQL-Injection zu verhindern.

Header bereits gesendet: Wenn vor dem Aufruf von cubrid_lob_send() bereits Ausgabe an den Browser erfolgt ist, schlagen header()-Aufrufe fehl. Stelle sicher, dass keine Ausgabe (auch keine Leerzeichen oder BOM) vor der Funktion steht.

Speicherverbrauch: Die Funktion streamt die Daten direkt, ohne sie vollständig in den Arbeitsspeicher zu laden, was sie für sehr große Dateien geeignet macht. Dennoch sollte das PHP-Speicherlimit und der max_execution_time-Wert bei großen LOBs im Blick behalten werden.