CLXXI. YAZ

Introduction

Cette extension offre à PHP l'interface avec les produits YAZ, qui implémentent le protocole Z39.50. Avec cette extension, vous pouvez facilement implémenter un client Z39.50 qui analyse ou scanne des serveurs Z39.50 en parallèle.

Le module masque l'essentiel de la complexité de Z39.50, ce qui le rend très facile à utiliser. Il supporte les connexions persistantes de manière similaire à celles supportées par les serveurs SQL : cela signifie qu'une connexion est partagée entre plusieurs scripts PHP, ce qui évite les opérations de connexions.

YAZ est disponible sur http://www.indexdata.dk/yaz/. Vous pouvez trouver des informations, des scripts d'exemples, etc. pour cette extension sur http://www.indexdata.dk/phpyaz/.

Note : Cette extension a été déplacée dans le module PECL et ne sera plus intégrée dans PHP à partir de PHP 5.0.0.

Installation

Obtenez YAZ (ANSI/NISO Z39.50 support) et installez-le. YAZ peut être récupéré en source ou dans des paquetages déjà compilés à partir des archives YAZ. Les systèmes tels que Debian GNU/Linux, Suse Linux, FreeBSD ont aussi YAZ fourni dans leur distribution.

Pour les versions de PHP 4, l'extension YAZ y est intégré (mais pas YAZ soi-même). Compiler PHP avec vos modules favoris et ajoutez l'option --with-yaz[=DIR].

Exemple 1. Compilation de YAZ pour PHP 4 sur Unix

gunzip -c php-4.4.X.tar.gz|tar xf -
gunzip -c yaz-2.1.8.tar.gz|tar xf -
cd yaz-2.1.8
./configure --prefix=/usr
make
sudo make install
cd ../php-4.4.X.
./configure --with-yaz=/usr/bin
make
sudo make install

Pour PHP 5, l'extension YAZ est dans PECL et est installée en tant qu'objet/dll partagé. Si vous avez pear d'installé, la plus facile méthode pour télécharger, configurer et installer l'extension YAZ est d'utiliser la commande pear.

Exemple 2. Installation de YAZ PECL sur Linux Gnu/Debian

L'exemple suivant installe YAZ et YAZ PECL sur un système Debian GNU/Linux :

sudo apt-get install libyaz-dev
sudo pear install yaz

Sur Windows, php_yaz.dll dépend de yaz.dll. Le fichier yaz.dll est une partie du fichier ZIP Win32 provenant du site de PHP. Il s'agit aussi d'une partie de l'installation de Windows YAZ disponible sur YAZ WIN32 area.

Avertissement

Le fichier zip Win32 de PHP 5.0.5 inclue une version trop vieille de yaz.dll (version 1.9.1 < version 2.0.13 requise). Si tel est le cas, utilisez, yaz.dll à partir d'une nouvelle installation YAZ WIN32.

Sur windows, n'oubliez pas d'ajouter le répertoire de PHP à votre variable d'environnement PATH pour que le fichier yaz.dll puisse être trouvé par votre système.

Si vous utilisez YAZ sous forme d'extension partagée, ajoutez (ou décommentez) la ligne suivante dans le fichier php.ini sous Unix:
extension=php_yaz.so
Et sous Windows :
extension=php_yaz.dll

Avertissement

L'extension IMAP ne peut être utilisée simultanément avec l'extension recode, l'extension YAZ ou l'extension Cyrus. Ceci est dû au fait que ces bibliothèques utilisent un symbole interne commun.

Note : Le problème ci-dessus est résolu en version 2.0 de YAZ.

Configuration à l'exécution

Le comportement de ces fonctions est affecté par la configuration dans le fichier php.ini.

Tableau 1. Options de configuration

NomPar défautModifiableHistorique
yaz.max_links"100"PHP_INI_ALLDisponible depuis PHP 4.3.0.
yaz.log_fileNULLPHP_INI_ALLDisponible depuis PHP 4.3.0.
Pour plus de détails sur les constantes PHP_INI_*, reportez-vous à Annexe G.

Types de ressources

Cette extension ne définit aucune ressource.

Constantes pré-définies

Cette extension ne définit aucune constante.

Exemples

PHP/YAZ conserve les connexions aux serveurs. Une ressource de connexion représente une connexion particulière.

Le script ci-dessous montre comment effectuer une recherche parallèle. Lorsqu'il est appelé sans paramètres, ce script affiche la requête. Sinon, il effectue la recherche sur les serveurs donnés par le tableau host.

Exemple 3. Recherche parallèle utilisant YAZ

<?php
$host
=$_REQUEST[host];
$query=$_REQUEST[query];
$num_hosts = count($host);
if (empty(
$query) || count($host) == 0) {
    echo
'<form method="get">
    <input type="checkbox"
    name="host[]" value="bagel.indexdata.dk/gils" />
        GILS test
    <input type="checkbox"
    name="host[]" value="localhost:9999/Default" />
        local test
    <input type="checkbox" checked="checked"
    name="host[]" value="z3950.loc.gov:7090/voyager" />
        Library of Congress
    <br />
    RPN Query:
    <input type="text" size="30" name="query" />
    <input type="submit" name="action" value="Search" />
    </form>
    '
;
} else {
    echo
'Vous avez recherché '.htmlspecialchars($query).'<br />';
    for (
$i = 0; $i < $num_hosts; $i++) {
        
$id[] = yaz_connect($host[$i]);
        
yaz_syntax($id[$i], "usmarc");
        
yaz_range($id[$i], 1, 10);
        
yaz_search($id[$i], "rpn", $query);
    }
    
yaz_wait();
    for (
$i = 0; $i < $num_hosts; $i++) {
        echo
'<hr />' . $host[$i] . ':';
        
$error = yaz_error($id[$i]);
        if (!empty(
$error)) {
            echo
"Erreur: $error";
        } else {
            
$hits = yaz_hits($id[$i]);
            echo
"Nombre de résultats : $hits";
        }
        echo
'<dl>';
        for (
$p = 1; $p <= 10; $p++) {
            
$rec = yaz_record($id[$i], $p, "string");
            if (empty(
$rec)) continue;
            echo
"<dt><strong>$p</strong></dt><dd>";
            echo
nl2br($rec);
            echo
"</dd>";
        }
        echo
'</dl>';
    }
}
?>

Table des matières
yaz_addinfo -- Retourne plus de détails après une erreur
yaz_ccl_conf -- Configure l'analyseur CCL
yaz_ccl_parse -- Appelle l'analyseur CCL
yaz_close -- Ferme une connexion YAZ
yaz_connect -- Prépare une connexion à un serveur Z39.50
yaz_database --  Spécifie la base d'une session YAZ
yaz_element --  Spécifie le type d'éléments YAZ à lire
yaz_errno -- Retourne le numéro d'erreur
yaz_error -- Retourne une description de l'erreur
yaz_es_result --  Inspecte le résultat Extended Services
yaz_get_option -- Retourne la valeur d'une option de connexion YAZ
yaz_hits --  Retourne le nombre de résultats de la dernière recherche
yaz_itemorder --  Prépare une requête Z39.50 Item Order avec le package ILL-Request
yaz_present -- Prépare à la lecture (Z39.50 present)
yaz_range --  Spécifie le nombre maximal de résultats à lire
yaz_record -- Retourne un résultat
yaz_scan_result -- Retourne le résultat d'un scan
yaz_scan -- Prépare un scan
yaz_schema -- Spécifie le schéma de lecture
yaz_search -- Prépare une recherche
yaz_set_option -- Modifie une ou plusieurs options de connexion YAZ
yaz_sort -- Configure les critères de tri
yaz_syntax -- Spécifie la syntaxe de lecture des lignes
yaz_wait -- Attend l'exécution d'une requête