Signatur
Beschreibung
yaz_wait() blockiert die Ausführung, bis alle ausstehenden Z39.50-Anfragen (die zuvor z. B. mit yaz_search() oder yaz_present() initiiert wurden) abgeschlossen sind. Die Funktion ist zentraler Bestandteil des asynchronen Arbeitsmodus der YAZ-Erweiterung, bei dem mehrere Verbindungen gleichzeitig bedient werden können.
Der optionale Parameter $options ist ein assoziatives Array, über das das Verhalten der Wartefunktion gesteuert werden kann. So kann etwa mit dem Schlüssel timeout ein Zeitlimit in Sekunden gesetzt werden, nach dem die Funktion auch dann zurückkehrt, wenn noch nicht alle Anfragen beendet sind. Der Schlüssel event (bool) bewirkt, dass yaz_wait() nach jedem einzelnen Ereignis zurückkehrt, anstatt auf alle Verbindungen zu warten.
Nach dem Aufruf von yaz_wait() können mit Funktionen wie yaz_hits(), yaz_record() oder yaz_error() die Ergebnisse der einzelnen Verbindungen abgefragt werden. Die Funktion ist insbesondere bei der parallelen Abfrage mehrerer Bibliothekskataloge (Z39.50-Protokoll) sinnvoll, da sie das gleichzeitige Warten auf mehrere Server ermöglicht.
Hinweis: Die YAZ-Erweiterung (ext/yaz) ist in PHP 7.0 als PECL-Paket ausgelagert worden und gilt als veraltet. Für neue Projekte sollten alternative Bibliotheken in Betracht gezogen werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $options | array | [] | Assoziatives Array mit Steuerungsoptionen. Unterstützte Schlüssel: timeout (int, maximale Wartezeit in Sekunden), event (bool, wenn true kehrt die Funktion nach jedem Ereignis zurück). |
Rückgabewert
true zurück, wenn alle Verbindungen erfolgreich abgeschlossen wurden. Im Fehlerfall oder bei Timeout wird false zurückgegeben. Wenn event gesetzt ist, wird eine Ressource der Verbindung zurückgegeben, bei der das Ereignis aufgetreten ist.Beispiele
Einfache parallele Z39.50-Suche auf zwei Servern
<?php
// Verbindung zu zwei Z39.50-Servern herstellen
$id1 = yaz_connect('z3950.example1.org/VOYAGER');
$id2 = yaz_connect('z3950.example2.org/INNOPAC');
// Syntaxformat festlegen
yaz_syntax($id1, 'usmarc');
yaz_syntax($id2, 'usmarc');
// Suchanfragen starten (asynchron)
yaz_search($id1, 'rpn', '@attr 1=4 "Bibliothek"');
yaz_search($id2, 'rpn', '@attr 1=4 "Bibliothek"');
// Auf Abschluss beider Anfragen warten
$options = ['timeout' => 30];
$result = yaz_wait($options);
if ($result) {
// Treffer und erste Ergebnisse ausgeben
echo 'Server 1 Treffer: ' . yaz_hits($id1) . PHP_EOL;
echo 'Server 2 Treffer: ' . yaz_hits($id2) . PHP_EOL;
} else {
echo 'Fehler oder Timeout aufgetreten.' . PHP_EOL;
}
yaz_close($id1);
yaz_close($id2);
?>
Ereignisgesteuertes Warten mit der event-Option
<?php
$id1 = yaz_connect('z3950.server1.org/DB1');
$id2 = yaz_connect('z3950.server2.org/DB2');
yaz_syntax($id1, 'usmarc');
yaz_syntax($id2, 'usmarc');
yaz_search($id1, 'rpn', '@attr 1=4 "Informatik"');
yaz_search($id2, 'rpn', '@attr 1=4 "Informatik"');
$options = ['event' => true, 'timeout' => 15];
// Ereignisschleife: nach jedem Ereignis zurückkehren
while ($conn = yaz_wait($options)) {
$error = yaz_error($conn);
if ($error) {
echo 'Fehler auf Verbindung: ' . $error . PHP_EOL;
} else {
echo 'Treffer: ' . yaz_hits($conn) . PHP_EOL;
}
}
yaz_close($id1);
yaz_close($id2);
?>
// Wichtig · Fallstricke
Deprecation: Die yaz-Erweiterung wurde aus dem PHP-Core entfernt und ist seit PHP 7.0 nur noch als PECL-Paket verfügbar. Die Weiterentwicklung ist weitgehend eingestellt; für neue Projekte sollten moderne Alternativen wie ZOOM oder andere Z39.50-Bibliotheken genutzt werden.
Bei Verwendung von timeout ist zu beachten, dass bei Ablauf des Timeouts nicht alle Ergebnisse vorliegen. Es sollte stets geprüft werden, ob für jede Verbindung einzeln mit yaz_error() ein Fehler vorliegt, bevor Ergebnisse verarbeitet werden.
Die Funktion ist nicht thread-sicher und sollte in Multi-Thread-Umgebungen mit Vorsicht eingesetzt werden.