Signatur
Beschreibung
ibase_wait_event() ist eine blockierende Funktion, die das aktuelle PHP-Skript solange anhält, bis die Firebird- oder InterBase-Datenbank eines der übergebenen Ereignisse (Events) über ihren internen Ereignismechanismus veröffentlicht. Sobald ein Ereignis eintrifft, gibt die Funktion dessen Namen als Zeichenkette zurück.
Datenbank-Ereignisse werden in Firebird/InterBase üblicherweise durch Stored Procedures oder Trigger ausgelöst (z. B. mittels POST_EVENT 'my_event'). Mit ibase_wait_event() kann PHP synchron auf solche Ereignisse reagieren, ohne wiederholt die Datenbank abfragen zu müssen (Polling). Dies spart Ressourcen und ermöglicht eine reaktive Programmierung auf Datenbankebene.
Es können mehrere Ereignisnamen übergeben werden; die Funktion kehrt zurück, sobald eines davon eintrifft. Der Rückgabewert enthält den Namen des ausgelösten Ereignisses, sodass der Code entsprechend verzweigen kann. Für nicht-blockierendes Verhalten steht alternativ ibase_set_event_handler() zur Verfügung.
Wichtig: Die gesamte ibase_*-Erweiterung (auch als interbase bekannt) wurde mit PHP 8.0 aus dem PHP-Core entfernt. Ab PHP 8.0 steht die Erweiterung nur noch über PECL (als ibase) oder über den Firebird-eigenen Treiber zur Verfügung.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $link_identifier | resource | null | Eine Firebird/InterBase-Datenbankverbindung, die mit ibase_connect() oder ibase_pconnect() geöffnet wurde. Wird dieser Parameter weggelassen, wird die zuletzt geöffnete Verbindung verwendet. |
| $event_name Pflicht | string | Der Name des ersten Datenbankeignisses, auf das gewartet werden soll. Dieser Name muss exakt mit dem Namen übereinstimmen, der in der Datenbank per POST_EVENT veröffentlicht wird. |
|
| $event_names | string | Optionale weitere Ereignisnamen. Die Funktion kehrt zurück, sobald eines der aufgeführten Ereignisse eintrifft. |
Rückgabewert
Beispiele
Auf ein einzelnes Datenbank-Ereignis warten
<?php
// Verbindung zur Firebird-Datenbank herstellen
$dbh = ibase_connect('/var/firebird/mydb.fdb', 'sysdba', 'masterkey');
echo "Warte auf Ereignis 'new_order' ...\n";
// Blockiert, bis 'new_order' von der DB ausgelöst wird
$event = ibase_wait_event($dbh, 'new_order');
echo "Ereignis empfangen: " . $event . "\n";
// Hier folgt die Verarbeitungslogik für die neue Bestellung
ibase_close($dbh);
Auf mehrere Ereignisse warten und verzweigen
<?php
$dbh = ibase_connect('/var/firebird/mydb.fdb', 'sysdba', 'masterkey');
echo "Warte auf Ereignisse ...\n";
// Blockiert, bis eines der drei Ereignisse eintrifft
$event = ibase_wait_event($dbh, 'order_created', 'order_updated', 'order_deleted');
switch ($event) {
case 'order_created':
echo "Eine neue Bestellung wurde erstellt.\n";
break;
case 'order_updated':
echo "Eine Bestellung wurde aktualisiert.\n";
break;
case 'order_deleted':
echo "Eine Bestellung wurde gelöscht.\n";
break;
default:
echo "Unbekanntes Ereignis: $event\n";
}
ibase_close($dbh);
// Wichtig · Fallstricke
Entfernung aus dem PHP-Core: Die ibase_*-Erweiterung wurde mit PHP 8.0 aus dem offiziellen PHP-Kern entfernt. Für PHP 8.0+ muss die Erweiterung separat über PECL installiert oder der von Firebird bereitgestellte PHP-Treiber verwendet werden.
Blockierendes Verhalten: Da ibase_wait_event() das Skript vollständig blockiert, ist die Funktion für Web-Anfragen mit kurzen Timeouts ungeeignet. Sie eignet sich primär für CLI-Skripte oder langlaufende Hintergrundprozesse. Für nicht-blockierendes Verhalten sollte ibase_set_event_handler() bevorzugt werden.
Kein Timeout: Es gibt keinen eingebauten Timeout-Mechanismus. Wird das erwartete Ereignis nie ausgelöst, hängt das Skript unbegrenzt. Für produktive Umgebungen sollte daher ein externes Timeout (z. B. über set_time_limit() oder ein Prozess-Management-Tool) eingeplant werden.