Signatur
Beschreibung
ibase_blob_cancel() bricht den Schreibvorgang eines BLOB-Objekts (Binary Large Object) ab, das zuvor mit ibase_blob_create() geöffnet wurde. Die bisher in den BLOB geschriebenen Daten werden verworfen und der BLOB wird nicht in der Datenbank gespeichert.
Diese Funktion ist dann sinnvoll, wenn während des Schreibprozesses ein Fehler auftritt oder die Anwendungslogik entscheidet, dass der BLOB nicht persistiert werden soll. Sie stellt das Gegenstück zu ibase_blob_close() dar, das den BLOB abschließt und zur Speicherung freigibt.
Nach dem Aufruf von ibase_blob_cancel() ist der übergebene Handle nicht mehr verwendbar. Es ist wichtig, diese Funktion aufzurufen, um Ressourcenlecks zu vermeiden, wenn ein begonnener BLOB-Schreibvorgang nicht abgeschlossen werden soll.
Hinweis: Die Interbase/Firebird-Erweiterung (ibase_*) wurde mit PHP 7.4 aus dem PHP-Core entfernt. Ab PHP 7.4 steht sie als PECL-Erweiterung (ibase bzw. FirebirdSQL/php-firebird) zur Verfügung.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $blob_handle Pflicht | resource | Ein BLOB-Handle, das zuvor durch ibase_blob_create() geöffnet wurde und dessen Erstellung abgebrochen werden soll. |
Rückgabewert
true zurück, wenn der BLOB erfolgreich abgebrochen wurde, oder false im Fehlerfall (z. B. wenn der Handle ungültig ist oder bereits geschlossen wurde).Beispiele
BLOB-Erstellung bei Fehler abbrechen
<?php
$dbh = ibase_connect('localhost:database.fdb', 'user', 'password');
// BLOB-Schreibvorgang starten
$blob = ibase_blob_create($dbh);
$data = file_get_contents('/pfad/zur/datei.bin');
if ($data === false) {
// Datei konnte nicht gelesen werden – BLOB abbrechen
ibase_blob_cancel($blob);
echo "BLOB-Erstellung abgebrochen: Datei nicht lesbar.";
} else {
// Daten in den BLOB schreiben
ibase_blob_add($blob, $data);
// BLOB abschließen und Handle zum Speichern erhalten
$blob_id = ibase_blob_close($blob);
echo "BLOB erfolgreich gespeichert mit ID: " . bin2hex($blob_id);
}
ibase_close($dbh);
?>
BLOB-Abbruch bei Größenüberschreitung
<?php
$dbh = ibase_connect('localhost:database.fdb', 'user', 'password');
$maxSize = 1024 * 1024; // 1 MB
$inputData = str_repeat('X', 2 * 1024 * 1024); // 2 MB Testdaten
$blob = ibase_blob_create($dbh);
if (strlen($inputData) > $maxSize) {
// Daten überschreiten das erlaubte Limit – BLOB abbrechen
if (ibase_blob_cancel($blob)) {
echo "BLOB abgebrochen: Datengröße überschreitet das erlaubte Maximum.";
} else {
echo "Fehler beim Abbrechen des BLOBs.";
}
} else {
ibase_blob_add($blob, $inputData);
$blob_id = ibase_blob_close($blob);
echo "BLOB gespeichert.";
}
ibase_close($dbh);
?>
// Wichtig · Fallstricke
Deprecation / Entfernung: Die gesamte ibase_*-Erweiterung wurde in PHP 7.4 als deprecated markiert und aus dem PHP-Core entfernt. Für aktuelle Projekte sollte die PECL-Erweiterung ibase oder PDO mit dem Firebird-Treiber verwendet werden.
Ressourcenmanagement: Es ist wichtig, nach einem begonnenen ibase_blob_create()-Aufruf entweder ibase_blob_close() oder ibase_blob_cancel() aufzurufen. Wird keines von beiden aufgerufen, können serverseitige Ressourcen belegt bleiben.
Transaktionssicherheit: Das Abbrechen eines BLOBs bedeutet nicht automatisch das Rollback der gesamten Transaktion. Transaktionen müssen separat mit ibase_rollback() zurückgerollt werden.