Start · Sprachen · PHP · Referenz · cubrid_lob_size

cubrid_lob_size

Funktion

Gibt die Größe eines CUBRID BLOB- oder CLOB-Objekts in Bytes als Zeichenkette zurück.

seit PHP 5.0.0 Kategorie: db

Signatur

cubrid_lob_size(resource $lob_identifier): string|false

Beschreibung

cubrid_lob_size ermittelt die Größe eines BLOB- (Binary Large Object) oder CLOB- (Character Large Object) Datums, das zuvor über eine CUBRID-Datenbankverbindung abgerufen wurde. Der Rückgabewert ist eine Zeichenkette (String), da die Größe von LOB-Objekten die Grenzen eines 32-Bit-Integers überschreiten kann und daher als Zeichenkette repräsentiert wird.

Diese Funktion ist nützlich, um vor dem eigentlichen Lesen oder Verarbeiten eines LOB-Wertes zunächst dessen Größe zu prüfen – etwa um Speicherreservierungen vorzunehmen, Fortschrittsanzeigen zu implementieren oder zu entscheiden, ob ein LOB-Objekt in Teilen (chunked) gelesen werden soll.

Das LOB-Identifikator-Handle wird typischerweise durch cubrid_lob_get erzeugt und sollte nach der Verwendung mit cubrid_lob_close wieder freigegeben werden, um Ressourcenlecks zu vermeiden.

  • Gibt false zurück, wenn der übergebene Handle ungültig ist oder ein Fehler auftritt.
  • Der zurückgegebene Wert ist ein String, um auch Dateigrößen über 2 GB korrekt darzustellen.

Parameter

Name Typ Default Beschreibung
$lob_identifier Pflicht resource Ein gültiges LOB-Ressourcen-Handle, das durch cubrid_lob_get erzeugt wurde und ein BLOB- oder CLOB-Objekt repräsentiert.

Rückgabewert

Typ
string|false
Beschreibung
Gibt die Größe des LOB-Objekts in Bytes als Zeichenkette zurück. Im Fehlerfall oder bei ungültigem Handle wird false zurückgegeben.

Beispiele

Größe eines BLOB-Objekts ermitteln

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

$result = cubrid_query('SELECT image_data FROM product_images WHERE id = 1', $conn);
$row    = cubrid_fetch($result, CUBRID_LOB);

// LOB-Handle aus dem Ergebnis holen
$lobs = cubrid_lob_get($conn, $result);

if ($lobs !== false) {
    foreach ($lobs as $lob) {
        $size = cubrid_lob_size($lob);
        if ($size !== false) {
            echo 'LOB-Größe: ' . $size . ' Bytes' . PHP_EOL;
        } else {
            echo 'Fehler beim Ermitteln der LOB-Größe.' . PHP_EOL;
        }
        cubrid_lob_close($lob);
    }
}

cubrid_close($conn);
?>
LOB-Größe: 204800 Bytes

LOB-Größe vor dem Lesen prüfen und ggf. verweigern

<?php
define('MAX_LOB_BYTES', 10 * 1024 * 1024); // 10 MB Limit

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

$result = cubrid_query('SELECT document_text FROM documents WHERE id = 42', $conn);
$lobs   = cubrid_lob_get($conn, $result);

if ($lobs !== false) {
    foreach ($lobs as $lob) {
        $size = cubrid_lob_size($lob);

        if ($size === false) {
            echo 'LOB-Größe konnte nicht ermittelt werden.' . PHP_EOL;
        } elseif ((int)$size > MAX_LOB_BYTES) {
            echo 'LOB-Objekt zu groß (' . $size . ' Bytes), wird übersprungen.' . PHP_EOL;
        } else {
            $data = cubrid_lob_export($conn, $lob, '/tmp/dokument_42.txt');
            echo 'Dokument exportiert (' . $size . ' Bytes).' . PHP_EOL;
        }

        cubrid_lob_close($lob);
    }
}

cubrid_close($conn);
?>
Dokument exportiert (51200 Bytes).

// Wichtig · Fallstricke

Rückgabe als String: Obwohl die Größe numerisch erscheint, wird sie absichtlich als string zurückgegeben, da LOB-Objekte in CUBRID mehrere Gigabyte groß sein können und 32-Bit-Integer-Werte überschreiten würden. Beim Vergleich oder Rechnen mit dem Wert sollte bcmath oder eine Konvertierung in float verwendet werden.

Ressourcen-Management: LOB-Handles sollten nach der Verwendung stets mit cubrid_lob_close geschlossen werden, um Verbindungsressourcen freizugeben.

Verfügbarkeit: Diese Funktion steht nur zur Verfügung, wenn die CUBRID-PHP-Erweiterung installiert und aktiviert ist. Sie ist in Standard-PHP-Distributionen nicht enthalten.