Start · Sprachen · PHP · Referenz · yaz_connect

yaz_connect

Funktion

Bereitet eine Verbindung zu einem Z39.50-Server vor und gibt ein Verbindungs-Handle zurück.

seit PHP 4.0.1 Kategorie: misc

Signatur

yaz_connect(string $zurl, mixed $options = null): mixed

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

Typ
mixed
Beschreibung
Gibt bei Erfolg ein Verbindungs-Handle (Ressource oder Integer-ID) zurück, das für alle weiteren YAZ-Funktionsaufrufe benötigt wird. Im Fehlerfall wird 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);
Gefundene Treffer: 42

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);
}
Server 1 Treffer: 17 Server 2 Treffer: 35

// 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.