Start · Sprachen · PHP · Referenz · ibase_free_event_handler

ibase_free_event_handler

Funktion

Bricht einen zuvor mit <code>ibase_set_event_handler()</code> registrierten Ereignishandler ab und gibt die zugehörige Ressource frei.

seit PHP 5.0.0 Kategorie: db

Signatur

ibase_free_event_handler(resource $event): bool

Beschreibung

ibase_free_event_handler() dient dazu, einen Interbase/Firebird-Ereignishandler, der zuvor mit ibase_set_event_handler() registriert wurde, wieder abzumelden. Dabei wird die intern verwendete Ereignisressource freigegeben und das Warten auf Datenbankereignisse für diesen Handler beendet.

In Interbase/Firebird kann die Datenbank Ereignisse auslösen (z. B. durch Trigger oder gespeicherte Prozeduren). Mit ibase_set_event_handler() kann eine PHP-Callback-Funktion registriert werden, die aufgerufen wird, sobald ein solches Ereignis eintritt. Wenn der Ereignishandler nicht mehr benötigt wird, sollte er mit ibase_free_event_handler() abgemeldet werden, um Ressourcen sauber freizugeben und keine unnötigen Datenbankverbindungen offen zu halten.

Diese Funktion gibt true bei Erfolg zurück. Sie sollte immer aufgerufen werden, wenn das Abhören von Ereignissen nicht mehr erforderlich ist, insbesondere in lang laufenden Skripten oder Daemon-Prozessen, um Speicher- und Verbindungslecks zu vermeiden.

Hinweis: Die ibase_*-Funktionen sind seit PHP 7.4 in eine eigenständige PECL-Erweiterung (interbase) ausgelagert worden und stehen in neueren PHP-Versionen nicht mehr standardmäßig zur Verfügung.

Parameter

Name Typ Default Beschreibung
$event Pflicht resource Die Ereignisressource, die von ibase_set_event_handler() zurückgegeben wurde und nun freigegeben werden soll.

Rückgabewert

Typ
bool
Beschreibung
Gibt true bei Erfolg zurück, false bei einem Fehler (z. B. wenn die übergebene Ressource ungültig ist).

Beispiele

Ereignishandler registrieren und wieder freigeben

<?php
// Verbindung zur Firebird/Interbase-Datenbank herstellen
$dbh = ibase_connect('/pfad/zur/datenbank.fdb', 'sysdba', 'masterkey');

// Callback-Funktion für das Ereignis definieren
function meinEreignisHandler(string $ereignis, int $anzahl): void {
    echo "Ereignis '{$ereignis}' wurde {$anzahl}x ausgelöst.\n";
}

// Ereignishandler für das Ereignis 'NEUE_BESTELLUNG' registrieren
$eventRessource = ibase_set_event_handler($dbh, 'meinEreignisHandler', 'NEUE_BESTELLUNG');

// ... Verarbeitung ...

// Ereignishandler abmelden und Ressource freigeben
$ergebnis = ibase_free_event_handler($eventRessource);

if ($ergebnis) {
    echo "Ereignishandler erfolgreich freigegeben.\n";
} else {
    echo "Fehler beim Freigeben des Ereignishandlers.\n";
}

ibase_close($dbh);
Ereignishandler erfolgreich freigegeben.

Mehrere Ereignishandler verwalten und freigeben

<?php
$dbh = ibase_connect('/pfad/zur/datenbank.fdb', 'sysdba', 'masterkey');

function bestellungHandler(string $ereignis, int $anzahl): void {
    echo "Bestellung-Ereignis: {$anzahl}x\n";
}

function lagerHandler(string $ereignis, int $anzahl): void {
    echo "Lager-Ereignis: {$anzahl}x\n";
}

// Mehrere Ereignishandler registrieren
$handler1 = ibase_set_event_handler($dbh, 'bestellungHandler', 'NEUE_BESTELLUNG');
$handler2 = ibase_set_event_handler($dbh, 'lagerHandler', 'LAGER_AKTUALISIERT');

// Beide Handler in einem Array verwalten
$handlers = [$handler1, $handler2];

// Alle Handler freigeben
foreach ($handlers as $handler) {
    ibase_free_event_handler($handler);
}

echo "Alle Ereignishandler wurden freigegeben.\n";

ibase_close($dbh);
Alle Ereignishandler wurden freigegeben.

// Wichtig · Fallstricke

Deprecation/Verfügbarkeit: Die ibase_*-Funktionen wurden mit PHP 7.4 aus dem PHP-Kern entfernt und sind nur noch über die PECL-Erweiterung interbase verfügbar. In PHP 8.x und neuer müssen sie explizit als PECL-Paket installiert werden.

Ressourcenverwaltung: Es ist wichtig, ibase_free_event_handler() aufzurufen, sobald der Ereignishandler nicht mehr benötigt wird. Ein nicht freigegebener Handler kann in lang laufenden Skripten zu Ressourcenlecks und unnötig offenen Datenbankverbindungen führen.

Reihenfolge: Die Ressource sollte stets freigegeben werden, bevor die Datenbankverbindung mit ibase_close() geschlossen wird, um saubere Trennungsabläufe zu gewährleisten.