Signatur
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
falsezurü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
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 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);
?>
// 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.