Signatur
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
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);
?>
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);
}
?>
// 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.