Start · Sprachen · PHP · Referenz · yaz_scan

yaz_scan

Funktion

Bereitet einen Z39.50-Scan-Request vor, der beim nächsten Aufruf von <code>yaz_wait()</code> ausgeführt wird.

seit PHP 4.0.1 Kategorie: misc

Signatur

yaz_scan(resource $id, string $type, string $startterm, array $flags = []): void

Beschreibung

yaz_scan() initiiert einen Scan-Request auf einem Z39.50-Server. Der Scan-Vorgang ermöglicht es, einen Index (z. B. Titel-, Autor- oder Schlagwortindex) eines bibliografischen Servers schrittweise zu durchsuchen und die vorhandenen Indexterme aufzulisten, die einem bestimmten Startterm entsprechen oder darauf folgen.

Der Request wird nicht sofort ausgeführt, sondern erst, wenn yaz_wait() aufgerufen wird. Nach dem Abschluss können die Ergebnisse mit yaz_scan_result() abgerufen werden. Diese asynchrone Arbeitsweise erlaubt es, mehrere Verbindungen gleichzeitig zu bedienen.

Der Parameter type gibt den Typ des Abfrageausdrucks an. Derzeit wird hauptsächlich 'rpn' (Reverse Polish Notation, d. h. PQF-Format) unterstützt. Der startterm bestimmt, ab welchem Begriff der Scan beginnen soll. Über das optionale flags-Array lassen sich weitere Scan-Optionen wie number (Anzahl der gewünschten Terme), position und stepSize steuern.

Hinweis: Die YAZ-Extension ist eine PECL-Erweiterung für die Kommunikation mit Z39.50-Servern, wie sie in Bibliothekssystemen (OPAC) eingesetzt werden. Sie ist nicht standardmäßig in PHP enthalten und muss separat installiert werden.

Parameter

Name Typ Default Beschreibung
$id Pflicht resource Die Verbindungsressource, die von yaz_connect() zurückgegeben wurde.
$type Pflicht string Der Typ des Abfrageausdrucks. Derzeit wird 'rpn' (PQF-Format) unterstützt.
$startterm Pflicht string Der Startterm des Scans. Im PQF-Format wird der Attributsatz und der eigentliche Suchterm angegeben, z. B. @attr 1=4 Goethe.
$flags array [] Optionales Array mit Scan-Optionen. Mögliche Schlüssel sind: number (Anzahl der zurückzugebenden Terme, Standard: 10), position (Position des Startterminus im Ergebnis, Standard: 1) und stepSize (Schrittweite zwischen den Termen, Standard: 0).

Rückgabewert

Typ
void
Beschreibung
Diese Funktion gibt keinen Wert zurück. Der Scan-Request wird erst bei Aufruf von yaz_wait() tatsächlich ausgeführt.

Beispiele

Titelindex eines Z39.50-Servers scannen

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

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

// Scan im Titelindex (Attribut 1=4 = Title) ab dem Term "PHP"
yaz_scan($id, 'rpn', '@attr 1=4 PHP', [
    'number'   => 20,  // 20 Terme zurückgeben
    'position' => 1,   // Startterm an Position 1
]);

// Request ausführen
yaz_wait();

// Fehler prüfen
$error = yaz_error($id);
if ($error) {
    echo 'Fehler: ' . $error;
} else {
    // Scan-Ergebnisse abrufen
    $result = yaz_scan_result($id, $info);
    echo 'Gefundene Terme: ' . $info['number'] . PHP_EOL;
    foreach ($result as $term) {
        echo $term[1] . ' (' . $term[0] . ' Treffer)' . PHP_EOL;
    }
}
Gefundene Terme: 20 PHP (42 Treffer) PHP Programming (15 Treffer) ...

Scan mit Schrittweite für entfernten Index

<?php
$id = yaz_connect('opac.example-library.org:210/INNOPAC');
yaz_syntax($id, 'usmarc');

// Autorindex scannen, jede zweite Position überspringen
yaz_scan($id, 'rpn', '@attr 1=1003 Müller', [
    'number'   => 10,
    'position' => 5,
    'stepSize' => 2,
]);

yaz_wait();

if (!yaz_error($id)) {
    $terms = yaz_scan_result($id, $meta);
    echo 'Scan-Status: ' . $meta['scanStatus'] . PHP_EOL;
    foreach ($terms as [$count, $term]) {
        printf("%-40s %d Treffer\n", $term, $count);
    }
}
Scan-Status: 0 Müller, Hans 7 Treffer Müller, Klaus 3 Treffer ...

// Wichtig · Fallstricke

Veraltete Erweiterung: Die YAZ-PHP-Extension wird kaum noch aktiv weiterentwickelt und ist in modernen PHP-Umgebungen (PHP 8+) möglicherweise nicht verfügbar oder nicht offiziell unterstützt. Für neue Projekte sollte geprüft werden, ob eine alternative Z39.50-Bibliothek (z. B. über eine externe PHP-Bibliothek oder einen Proxy-Dienst) geeigneter ist.

Die Funktion gibt keinen Rückgabewert zurück und wirft keine Ausnahmen. Fehler müssen nach yaz_wait() explizit mit yaz_error() abgefragt werden.

Die YAZ-Extension muss als PECL-Paket installiert sein (pecl install yaz), und die C-Bibliothek libyaz muss auf dem System vorhanden sein.