Start · Sprachen · PHP · Referenz · yaz_present

yaz_present

Funktion

Bereitet den Abruf von Treffern einer Z39.50-Suchanfrage vor und leitet den Present-Request ein.

seit PHP 4.0.1 Kategorie: misc

Signatur

yaz_present(resource $id): bool

Beschreibung

yaz_present() initiiert einen Z39.50-Present-Request für eine zuvor mit yaz_search() oder yaz_find() gestartete Suche. Mit dem Present-Request werden die eigentlichen Datensätze vom Z39.50-Server angefordert, nachdem eine Treffermenge (Result Set) aufgebaut wurde.

Die Funktion wird typischerweise nach yaz_search() und vor yaz_wait() aufgerufen. Mit yaz_range() kann der Bereich der abzurufenden Datensätze festgelegt werden. Nach dem Abschluss von yaz_wait() können die einzelnen Datensätze mit yaz_record() ausgelesen werden.

Der Z39.50-Standard wird vor allem in Bibliothekssystemen und Informationsdiensten eingesetzt, um Bibliothekskataloge und Datenbanken zu durchsuchen. Das YAZ-Modul in PHP stellt die PHP-Schnittstelle zu diesem Protokoll bereit.

Hinweis: Die YAZ-Erweiterung ist ab PHP 7.0 nicht mehr im offiziellen Core enthalten und gilt als veraltet. Für neue Projekte sollten alternative Bibliotheken oder Webservices genutzt werden.

Parameter

Name Typ Default Beschreibung
$id Pflicht resource Die Verbindungsressource, die von yaz_connect() zurückgegeben wurde und die aktive Z39.50-Verbindung repräsentiert.

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn der Present-Request erfolgreich vorbereitet wurde, andernfalls false. Der eigentliche Datenabruf erfolgt erst nach dem Aufruf von yaz_wait().

Beispiele

Einfache Z39.50-Suche mit anschließendem Present

<?php
// Verbindung zu einem Z39.50-Server aufbauen
$id = yaz_connect('z3950.loc.gov:7090/Voyager');

if (!$id) {
    die('Verbindung fehlgeschlagen');
}

// Zeichensatz und Syntaxoptionen setzen
yaz_syntax($id, 'usmarc');
yaz_element($id, 'F');

// Suche vorbereiten und starten
yaz_search($id, 'rpn', '@attr 1=4 "php programming"');

// Present-Request für Datensätze 1–10 vorbereiten
yaz_range($id, 1, 10);
yaz_present($id);

// Auf Ergebnis warten
$info = yaz_wait();

if (yaz_error($id)) {
    echo 'Fehler: ' . yaz_error($id);
} else {
    $treffer = yaz_hits($id);
    echo "Gefundene Treffer: $treffer\n";
    // Datensätze ausgeben
    for ($i = 1; $i <= min(10, $treffer); $i++) {
        $record = yaz_record($id, $i, 'string');
        echo "Datensatz $i:\n$record\n";
    }
}

yaz_close($id);
?>
Gefundene Treffer: 42 Datensatz 1: ...

Parallele Suche auf mehreren Z39.50-Servern

<?php
// Mehrere Z39.50-Server gleichzeitig abfragen
$server1 = yaz_connect('z3950.loc.gov:7090/Voyager');
$server2 = yaz_connect('bibsys.no:2100/BIBSYS');

foreach ([$server1, $server2] as $srv) {
    yaz_syntax($srv, 'usmarc');
    yaz_search($srv, 'rpn', '@attr 1=4 "linux"');
    yaz_range($srv, 1, 5);
    yaz_present($srv);
}

// Auf alle Server gleichzeitig warten
yaz_wait();

foreach ([$server1, $server2] as $index => $srv) {
    echo "Server " . ($index + 1) . ": " . yaz_hits($srv) . " Treffer\n";
    if (!yaz_error($srv)) {
        for ($i = 1; $i <= 5; $i++) {
            $rec = yaz_record($srv, $i, 'string');
            if ($rec) {
                echo "  [$i] $rec\n";
            }
        }
    }
    yaz_close($srv);
}
?>
Server 1: 120 Treffer [1] ... Server 2: 85 Treffer [1] ...

// Wichtig · Fallstricke

Deprecation: Die YAZ-PHP-Erweiterung wird seit PHP 7.0 nicht mehr offiziell unterstützt und ist in modernen PHP-Versionen nicht mehr verfügbar. Für neue Projekte sollte auf externe Bibliotheken wie File_MARC oder REST-basierte Katalog-APIs ausgewichen werden.

Reihenfolge beachten: yaz_present() muss nach yaz_search() und yaz_range(), aber vor yaz_wait() aufgerufen werden. Eine falsche Reihenfolge führt zu keinen oder falschen Ergebnissen.

Ressourcennutzung: Bei umfangreichen Trefferlisten sollte der Abrufbereich mit yaz_range() auf eine sinnvolle Anzahl begrenzt werden, um Netzwerk und Server nicht zu überlasten.