Signatur
Beschreibung
yaz_connect() initiiert eine nicht-blockierende Verbindung zu einem Z39.50-Server über das YAZ-Bibliothekssystem (Yet Another Z39.50). Z39.50 ist ein Netzwerkprotokoll für die Informationssuche, das hauptsächlich in Bibliothekssystemen und Informationsretrieval-Anwendungen eingesetzt wird. Die Funktion gibt ein Verbindungs-Handle zurück, das für nachfolgende YAZ-Aufrufe wie yaz_search() oder yaz_present() benötigt wird.
Wichtig: Die Verbindung wird bei diesem Aufruf noch nicht tatsächlich hergestellt. Die eigentliche Netzwerkverbindung erfolgt erst, wenn yaz_wait() aufgerufen wird, das alle ausstehenden YAZ-Verbindungen gleichzeitig und asynchron abarbeitet. Dies ermöglicht es, mehrere Server parallel abzufragen.
Der Parameter $options kann als Array übergeben werden, um Authentifizierungs- und Protokolloptionen zu konfigurieren. Typische Felder sind user, password, group, cookie und proxy. Alternativ kann ein einfacher String für den Benutzernamen übergeben werden.
Die Funktion ist Teil der YAZ-Erweiterung (PECL), die separat installiert werden muss. Sie eignet sich für Anwendungen, die Bibliothekskataloge, Archivdatenbanken oder andere Z39.50-konforme Dienste abfragen sollen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $zurl Pflicht | string | Die Adresse des Z39.50-Servers im Format host[:port][/database], z. B. z3950.loc.gov:7090/Voyager. Wenn kein Port angegeben wird, wird der Standard-Port 210 verwendet. |
|
| $options | mixed | null | Entweder ein String mit dem Benutzernamen oder ein assoziatives Array mit Verbindungsoptionen. Mögliche Array-Schlüssel: user (Benutzername), password (Passwort), group (Gruppe für Authentifizierung), cookie (Session-Cookie für Z39.50 Session-Resumption), proxy (Proxy-Adresse), persistent (bool, ob persistente Verbindungen verwendet werden sollen), piggyback (bool, ob Piggyback-Modus aktiv sein soll), charset (Zeichensatz für Anfragen und Antworten), preferredMessageSize und maximumRecordSize (Integer-Werte zur Steuerung der Datenmenge). |
Rückgabewert
false zurückgegeben. Da die Verbindung asynchron aufgebaut wird, bedeutet ein gültiges Handle noch nicht, dass die Verbindung erfolgreich hergestellt wurde — Verbindungsfehler werden erst nach dem Aufruf von yaz_wait() sichtbar und können dann mit yaz_error() abgefragt werden.Beispiele
Einfache Verbindung zu einem öffentlichen Z39.50-Server
<?php
// Verbindung zur Library of Congress vorbereiten
$handle = yaz_connect('z3950.loc.gov:7090/Voyager');
if (!$handle) {
die('Konnte Verbindungs-Handle nicht erstellen.');
}
// Suchanfrage definieren (CCL-Abfrage)
yaz_ccl_conf($handle, ['ti' => '1=4', 'au' => '1=1']);
yaz_search($handle, 'rpn', '@attr 1=4 "PHP"');
// Verbindung tatsächlich aufbauen und Suche ausführen
yaz_wait();
// Fehler prüfen
$error = yaz_error($handle);
if ($error) {
echo 'Fehler: ' . $error;
} else {
$treffer = yaz_hits($handle);
echo 'Gefundene Treffer: ' . $treffer;
}
yaz_close($handle);
Verbindung mit Authentifizierung und mehreren Servern parallel
<?php
// Zwei Server gleichzeitig verbinden
$handle1 = yaz_connect('z3950.example.com:210/catalog', [
'user' => 'meinuser',
'password' => 'geheim',
'charset' => 'UTF-8',
]);
$handle2 = yaz_connect('z3950.biblio.net:7090/books');
if (!$handle1 || !$handle2) {
die('Verbindungs-Handle konnte nicht erstellt werden.');
}
// Suchanfragen auf beiden Servern registrieren
$rpn = '@attr 1=4 "Datenbanken"';
yaz_search($handle1, 'rpn', $rpn);
yaz_search($handle2, 'rpn', $rpn);
// Beide Verbindungen parallel ausführen
yaz_wait();
foreach ([$handle1, $handle2] as $i => $h) {
$err = yaz_error($h);
if ($err) {
echo "Server " . ($i + 1) . " Fehler: $err\n";
} else {
echo "Server " . ($i + 1) . " Treffer: " . yaz_hits($h) . "\n";
}
yaz_close($h);
}
// Wichtig · Fallstricke
Erweiterung erforderlich: yaz_connect() ist Teil der PECL YAZ-Erweiterung und ist in PHP nicht standardmäßig enthalten. Die YAZ C-Bibliothek muss ebenfalls auf dem System installiert sein.
Asynchrones Verbindungsmodell: Der Aufruf von yaz_connect() allein stellt noch keine Netzwerkverbindung her. Erst yaz_wait() löst alle vorbereiteten Verbindungen und Operationen gleichzeitig aus. Verbindungsfehler sind daher erst nach yaz_wait() mit yaz_error() erkennbar.
Deprecation / Verfügbarkeit: Die YAZ-Erweiterung und Z39.50-Unterstützung gelten als Legacy-Technologie. In modernen PHP-Umgebungen (PHP 8+) kann die Erweiterung Kompatibilitätsprobleme aufweisen. Prüfe vor dem Einsatz die Verfügbarkeit auf dem Zielsystem mit extension_loaded('yaz').
Sicherheit: Benutzernamen und Passwörter sollten niemals hartkodiert im Quellcode stehen. Verwende Umgebungsvariablen oder externe Konfigurationsdateien. Da Z39.50 in der Regel unverschlüsselt überträgt, sollte bei sensiblen Daten ein VPN-Tunnel oder eine gesicherte Verbindung genutzt werden.