Start · Sprachen · PHP · Referenz · fbird_free_event_handler

fbird_free_event_handler

Funktion

Beendet die Überwachung eines zuvor registrierten Firebird/InterBase-Event-Handlers und gibt die zugehörige Ressource frei.

seit PHP 5.0.0 Kategorie: db

Signatur

fbird_free_event_handler(resource $event): bool

Beschreibung

fbird_free_event_handler() stoppt einen aktiven Event-Handler, der zuvor mit ibase_set_event_handler() (bzw. fbird_set_event_handler()) registriert wurde. Damit wird die Überwachung der angegebenen Datenbank-Events beendet und die zugehörige interne Ressource freigegeben.

Firebird/InterBase ermöglicht es, serverseitige Events auszulösen (z. B. via POST_EVENT in Stored Procedures oder Triggern). Mit einem Event-Handler kann die PHP-Anwendung asynchron auf solche Ereignisse reagieren, ohne kontinuierlich pollen zu müssen. Wenn die Überwachung eines bestimmten Events nicht länger benötigt wird, sollte der Handler mit dieser Funktion sauber beendet werden, um Ressourcen freizugeben.

Die Funktion ist ein Alias für ibase_free_event_handler() und gehört zur Firebird-Erweiterung (ext/firebird), die als Nachfolger der veralteten InterBase-Erweiterung gilt. Sie sollte immer aufgerufen werden, wenn ein Event-Handler nicht mehr gebraucht wird, um Memory-Leaks und offene Verbindungen zu vermeiden.

Parameter

Name Typ Default Beschreibung
$event Pflicht resource Eine Event-Handler-Ressource, die zuvor von ibase_set_event_handler() oder fbird_set_event_handler() zurückgegeben wurde.

Rückgabewert

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

Beispiele

Event-Handler registrieren und nach Verwendung beenden

<?php
// Datenbankverbindung herstellen
$dbh = ibase_connect('localhost:employee', 'sysdba', 'masterkey');

// Callback-Funktion, die bei ausgelöstem Event aufgerufen wird
function meinEventCallback(string $eventName, int $count, mixed $data = null): void {
    echo "Event empfangen: {$eventName}, Anzahl: {$count}\n";
}

// Event-Handler für das Event 'NEUER_AUFTRAG' registrieren
$eventHandler = ibase_set_event_handler($dbh, 'meinEventCallback', 'NEUER_AUFTRAG');

// ... (Hier würde die Anwendung auf Events warten und verarbeiten) ...

// Event-Handler beenden und Ressource freigeben
if (fbird_free_event_handler($eventHandler)) {
    echo "Event-Handler erfolgreich beendet.\n";
} else {
    echo "Fehler beim Beenden des Event-Handlers.\n";
}

ibase_close($dbh);
Event-Handler erfolgreich beendet.

Mehrere Event-Handler verwalten und gezielt beenden

<?php
$dbh = ibase_connect('localhost:employee', 'sysdba', 'masterkey');

function logEvent(string $eventName, int $count): void {
    echo "[LOG] Event: {$eventName}, Ausgelöst: {$count}x\n";
}

// Zwei verschiedene Event-Handler registrieren
$handler1 = ibase_set_event_handler($dbh, 'logEvent', 'AUFTRAG_ERSTELLT');
$handler2 = ibase_set_event_handler($dbh, 'logEvent', 'RECHNUNG_GEBUCHT');

// Nur Handler1 beenden, Handler2 bleibt aktiv
fbird_free_event_handler($handler1);
echo "Handler für AUFTRAG_ERSTELLT beendet.\n";

// Später auch Handler2 beenden
fbird_free_event_handler($handler2);
echo "Handler für RECHNUNG_GEBUCHT beendet.\n";

ibase_close($dbh);
Handler für AUFTRAG_ERSTELLT beendet. Handler für RECHNUNG_GEBUCHT beendet.

// Wichtig · Fallstricke

Alias: fbird_free_event_handler() ist ein Alias für ibase_free_event_handler(). Beide Funktionen sind funktional identisch. Es wird empfohlen, die fbird_*-Variante zu verwenden, da die ibase_*-Funktionen als veraltet gelten.

Ressourcenverwaltung: Vergisst man, den Event-Handler zu beenden, können Ressourcen-Leaks entstehen, insbesondere bei lang laufenden Skripten oder Worker-Prozessen. Achte darauf, fbird_free_event_handler() in finally-Blöcken zu verwenden, um eine saubere Freigabe auch im Fehlerfall sicherzustellen.

Verfügbarkeit: Diese Funktion setzt die Installation und Aktivierung der firebird-PHP-Erweiterung voraus. Auf manchen Systemen muss sie explizit in der php.ini aktiviert werden (extension=firebird).