Start · Sprachen · PHP · Referenz · cubrid_lob2_size64

cubrid_lob2_size64

Funktion

Gibt die Größe eines LOB-Objekts (BLOB oder CLOB) als 64-Bit-Zeichenkette zurück.

seit PHP 5.0.0 Kategorie: db

Signatur

cubrid_lob2_size64(resource $lob_identifier): string|false

Beschreibung

cubrid_lob2_size64() ermittelt die Größe eines LOB-Objekts (Large Object), das zuvor aus einer CUBRID-Datenbank geholt wurde. Der Rückgabewert ist eine Zeichenkette (String), die die Größe in Bytes repräsentiert. Im Gegensatz zu cubrid_lob2_size() liefert diese Funktion das Ergebnis als String, um auch Größen zu unterstützen, die den 32-Bit-Integer-Bereich übersteigen — relevant auf 32-Bit-Plattformen oder bei sehr großen LOB-Objekten.

LOB-Objekte werden in CUBRID für die Speicherung großer Binär- (BLOB) oder Textdaten (CLOB) verwendet. Bevor die Größe abgefragt werden kann, muss das LOB-Objekt über eine Datenbankabfrage geladen worden sein, z. B. via cubrid_fetch() oder cubrid_lob2_new().

Die Funktion ist besonders nützlich, wenn Dateigrößen überprüft, Speicherzuweisungen geplant oder Fortschrittsanzeigen beim Lesen von LOB-Daten realisiert werden sollen. Da der Rückgabewert ein String ist, sollte er bei arithmetischen Operationen mit bcmath- oder gmp-Funktionen verarbeitet werden, um Überläufe zu vermeiden.

Parameter

Name Typ Default Beschreibung
$lob_identifier Pflicht resource Ein LOB-Identifikator (Ressource), der durch eine CUBRID-Datenbankabfrage oder cubrid_lob2_new() erzeugt wurde.

Rückgabewert

Typ
string|false
Beschreibung
Gibt die Größe des LOB-Objekts in Bytes als String zurück. Im Fehlerfall wird false zurückgegeben, etwa wenn das übergebene Argument kein gültiger LOB-Identifikator ist.

Beispiele

Größe eines BLOB-Objekts ermitteln

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

$req = cubrid_execute($conn, "SELECT image FROM product WHERE id = 1");
if ($req) {
    $row = cubrid_fetch($req, CUBRID_NUM | CUBRID_LOB);
    $lob = $row[0];

    $size = cubrid_lob2_size64($lob);
    if ($size !== false) {
        echo "LOB-Größe: " . $size . " Bytes" . PHP_EOL;
    } else {
        echo "Fehler beim Abrufen der LOB-Größe." . PHP_EOL;
    }

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

cubrid_disconnect($conn);
?>
LOB-Größe: 5368709120 Bytes

LOB-Größe mit BCMath verarbeiten

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

$req = cubrid_execute($conn, "SELECT document FROM archive WHERE id = 42");
if ($req) {
    $row = cubrid_fetch($req, CUBRID_NUM | CUBRID_LOB);
    $lob = $row[0];

    $sizeBytes = cubrid_lob2_size64($lob);
    if ($sizeBytes !== false) {
        // Umrechnung in Megabytes mit BCMath (sichere Ganzzahl-Arithmetik)
        $sizeMB = bcdiv($sizeBytes, bcpow('1024', '2'), 2);
        echo "LOB-Größe: " . $sizeMB . " MB" . PHP_EOL;
    }

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

cubrid_disconnect($conn);
?>
LOB-Größe: 5120.00 MB

// Wichtig · Fallstricke

Plattformabhängigkeit: Auf 32-Bit-Systemen kann der Rückgabewert von cubrid_lob2_size() überlaufen, wenn die LOB-Größe den Integer-Maximalwert überschreitet. cubrid_lob2_size64() umgeht dieses Problem durch die Rückgabe als String. Für arithmetische Berechnungen mit dem Ergebnis empfiehlt sich die Verwendung der BCMath- oder GMP-Erweiterung.

Die Funktion setzt eine aktive CUBRID-Verbindung sowie einen gültigen LOB-Identifikator voraus. Nach der Verwendung sollte das LOB-Objekt mit cubrid_lob2_close() explizit geschlossen werden, um Ressourcen freizugeben.