Manuel PHP

Hyperwave

Introduction

Hyperwave a été développé par » IICM à Graz. Son nom original était » http://www.hyperwave.com/. Une version limitée à 30 jours peut être demandée.

Voir aussi le module Hyperwave API.

hw_pipedocument() et hw_gettext() le font pour vous. L'avantage de séparer les liens du document est évident : une fois qu'un document, cible d'un hyperlien, a été renommé, le liens peut facilement être modifié. Le document contenant le lien n'est pas modifié pour autant. Vous pouvez même ajouter un lien à un document sans le modifier.

Dire que hw_pipedocument() et hw_gettext() font l'insertion automatiquement n'est pas aussi simple qu'il y paraît. L'insertion implique une certaine hiérarchie de documents. Sur un serveur web, la hiérarchie est fournie par le système de fichiers, mais Hyperwave dispose de sa propre hiérarchie et les noms de fichiers ne reflètent pas la position d'un objet dans cette hiérarchie. Ainsi, la création de liens requiert en premier lieu la construction de la hiérarchie et de l'espace des noms dans une hiérarchie web et un espace de nom web. La différence fondamentale entre Hyperwave et le web est qu'il y a une distinction claire entre les noms et la hiérarchie dans Hyperwave. Le nom ne contient aucune information à propos de la position de l'objet dans la hiérarchie. Sur le web, le nom contient les informations de localisation dans la hiérarchie. Cela conduit à deux méthodes d'accès : soit la hiérarchie Hyperwave et le nom de l'objet sont inscrits dans l'URL. Pour simplifier les choses, une deuxième approche est pratiquée. L'objet Hyperwave de nom 'mon_objet' correspond à l'URL 'http://hote/mon_objet', peu importe alors où il est rangé dans la hiérarchie. Un objet dont le nom est 'parent/mon_objet' peut être le fils de l'objet 'mon_objet' dans la hiérarchie Hyperwave, bien que ce soit le contraire en convention web, et cela risque de perturber l'utilisateur.

Ayant pris cette décision, un deuxième problème surgit : comment faire l'interface avec PHP ? L'URL http://hote/mon_objet n'appellera aucun script PHP à moins que vous ne demandiez à votre serveur web de le remplacer par autre chose, comme : 'http://host/php3_script/mon_objet' et le script 'php3_script' utilise la variable $PATH_INFO pour rechercher l'objet 'mon_objet' sur le serveur Hyperwave. Il y a juste un petit inconvénient, qui peut facilement être corrigé. Réécrire une URL ne vous permettra aucun accès aux autres documents du serveur web. Un script de recherche dans le serveur Hyperwave serait impossible. Il vous faudra donc au moins une autre règle pour exclure certaines URL, comme celles qui commencent par http://host/Hyperwave. Voici, de manière simple, comment partager un espace de nom entre un serveur web et un serveur Hyperwave serveur.

Basé sur le mécanisme précédent, on trouve l'insertion dans les documents.

Il est plus compliqué d'avoir PHP ne fonctionnant pas comme un module de serveur, ou un script CGI, mais comme une application indépendante. Dans ce cas, il est utile d'inscrire la hiérarchie et le nom de fichier Hyperwave dans le système de fichier. Mais comme cela risque d'entrer en conflit avec le séparateur de dossier ('/'), il faut le remplacer par un autre caractère,. '_'.

Le protocole réseau pour communiquer avec un serveur Hyperwave est appelé » HG-CSP (Hyper-G Client/Server Protocol). Il est basé sur des messages qui initient des actions, comme lire l'en-tête de fichier. Dans les premières versions de Hyperwave Server, deux clients natifs (Harmony, Amadeus) étaient fournis pour permettre la communication avec le serveur. Ils ont disparu lors de la commercialisation de Hyperwave. En tant qu'ersatz, un client appelé wavemaster est désormais fourni. wavemaster est un espèce de convertisseur de protocole de hw_objrec2array(). De nombreuses fonctions retournent un objet record. Ces fonctions ont leur nom qui finit par obj.

  • object array : un tableau associatif qui contient tous les attributs d'un objet. La clé est l'attribut. Si un attribut apparaît plusieurs fois, il sera représenté sous la forme d'un tableau associatif ou indexé. Les attributs qui dépendent des langues (comme title, keyword ou description) seront représentés sous la forme d'un tableau associatif dont les clés seront les abréviations de langues. Tous les autres attributs à valeur multiple prendront la forme d'un tableau indexé.
  • hw_document : ce type est un nouveau type de données, qui contient le document lui-même, comme HTML, PDF etc. Il est optimisé pour les documents HTML mais peut s'utiliser avec n'importe quel format.
  • De nombreuses fonctions qui retournent un tableau d'enregistrements, retournent aussi un tableau associé, avec des informations statistiques. Ce tableau est le dernier élément du tableau d'enregistrements. Les statistiques contiennent les entrées suivantes :

    Hidden
    Nombre d'objets dont l'attribut PresentationHints est Hidden.
    CollectionHead
    Nombre d'objets dont l'attribut PresentationHints est CollectionHead.
    FullCollectionHead
    Nombre d'objets dont l'attribut PresentationHints est FullCollectionHead.
    CollectionHeadNr
    Index du premier objet du tableau d'enregistrement avec l'attribut PresentationHints à CollectionHead.
    FullCollectionHeadNr
    Index du premier objet du tableau d'enregistrement avec l'attribut PresentationHints est FullCollectionHead.
    Total
    Total : nombre d'enregistrements.

    Pré-requis

    Cette extension requiert un serveur Hyperwave, téléchargeable sur le site de » http://www.hyperwave.com/.

    Installation

    Cette extension » PECL n'est pas intégrée à PHP.

    Si vous voulez utiliser ces fonctions, vous devez compiler PHP avec le support Hyperwave en utilisant l'option de configuration --with-hyperwave[=DIR].

    Les utilisateurs de Windows doivent activer la bibliothèque php_hyperwave.dll dans le php.ini pour pouvoir utiliser ces fonctions. La bibliothèque » téléchargement PHP, soit depuis » http://pecl4win.php.net/

    Intégration avec Apache

    L'extension Hyperwave est utilisée de manière optimale lorsque PHP est compilé comme module Apache. Dans ce cas, le serveur Hyperwave sous-jacent peut être caché quasiment totalement aux utilisateurs, si Apache utilise son moteur d'écriture. Les explications suivantes vous éclaireront :

    Étant donné que PHP avec l'extension Hyperwave et Apache tend à remplacer la solution native basée sur Wavemaster, je vais supposer que le serveur Apache servira seulement d'interface Hyperwave. Ce n'est pas nécessaire, mais cela simplifie grandement la configuration. Le concept est très simple. Premièrement, vous avez besoin d'un script PHP qui évalue la variable $_ENV['PATH_INFO'] et considère que cette valeur est un objet Hyperwave. Appelons ce script 'Hyperwave'. L'URL http://votre.hote/Hyperwave/nom_objet retourne l'objet Hyperwave dont le nom est 'nom_objet'. Le script doit alors réagir suivant le type de l'objet. Si c'est un groupe, il devra probablement retourner une liste de fils. Si c'est un document, il pourra retourner son type MIME et son contenu. Une amélioration peut être obtenue en utilisant le moteur de réécriture d'Apache. D'un point de vue utilisateur, il est plus direct si l'URL http://votre.hote/nom_objet retourne l'objet. La règle de réécriture est simple :

    Example#1 Configuration d'Apache pour HyperWave

    RewriteRule ^/(.*) /usr/local/apache/htdocs/HyperWave/$1 [L]
    
    Maintenant, toutes les URL pointent sur un objet Hyperwave. Cela conduit à un problème simple. Il n'y a pas d'autre façon d'exécuter, c'est-à-dire rechercher, un autre script que ce script 'Hyperwave'. Cela pourra être corrigé avec une autre règle telle que :

    Example#2 Configuration d'Apache pour HyperWave (2)

    RewriteRule ^/hw/(.*) /usr/local/apache/htdocs/hw/$1 [L]
    
    Le dossier /usr/local/apache/htdocs/hw sera ainsi réservé pour d'autres scripts et fichiers. Assurez-vous que cette règle est évaluée avant la première règle que nous avons défini. Il y a juste un léger inconvénient : tous les objets Hyperwave qui commencent par 'hw/' seront cachés. Alors, assurez-vous que vous n'utilisez pas de tels noms. Si vous avez besoin d'autres dossiers, par exemple, un dossier d'images, ajoutez simplement d'autres règles. N'oubliez pas de lancer le moteur de réécriture avec.

    Example#3 Demarrer les règles de réécriture d'Apache pour HyperWave

    RewriteEngine on
    
    Mon expérience m'a montré que vous aurez besoin des scripts suivants :
    • Retourne l'objet lui-même
    • Pour autoriser la recherche
    • S'identifier
    • Choisir une configuration
    • Un script pour chaque fonction supplémentaire, comme afficher un objet, afficher des informations sur les utilisateurs, afficher le statut du serveur, etc.

    Une alternative pour le moteur de réécriture est l'utilisation de la directive Apache ErrorDocument, mais sachez alors que ErrorDocument n'effectue pas les redirections de méthodes POST.

    Configuration à l'exécution

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

    Options de configuration
    NomPar défaut ModifiableHistorique
    hyerwave.allow_persistent "0" PHP_INI_SYSTEM Disponible depuis PHP 4.3.2.
    hyperwave.default_port "418" PHP_INI_ALL  
    Pour plus de détails sur les constantes PHP_INI_*, reportez-vous à Directives du php.ini.

    Types de ressources

    Cette extension ne définit aucune ressource.

    Constantes pré-définies

    Ces constantes sont définies par cette extension, et ne sont disponibles que si cette extension a été compilée avec PHP, ou bien chargée au moment de l'exécution.

    HW_ATTR_LANG (entier)
    HW_ATTR_NR (entier)
    HW_ATTR_NONE (entier)

    À faire

    Il reste encore beaucoup à faire :

    • La fonction hw_InsertDocument doit être séparée en deux : hw_insertobject() et hw_putdocument().
    • Les noms de nombreuses fonctions ne sont pas encore fixés.
    • La majorité des fonctions requièrent la connexion courante comme premier paramètre. Cela conduit à beaucoup de frappe clavier, même s'il n'y a souvent qu'une seule connexion en jeu. Une connexion par défaut améliorerait ceci.
    • La conversion depuis un objet record en un objet array a besoin de gérer les attributs multiples.

    Table of Contents


    Remonter Remonter
    L'éditeur javascript - CSS - Gentoo - Tutoriaux PHP - Tutoriels PHP - Breizh Blog