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.
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]
Example#2 Configuration d'Apache pour HyperWave (2)
RewriteRule ^/hw/(.*) /usr/local/apache/htdocs/hw/$1 [L]
Example#3 Demarrer les règles de réécriture d'Apache pour HyperWave
RewriteEngine on
- 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.
| Nom | Par défaut | Modifiable | Historique |
|---|---|---|---|
| hyerwave.allow_persistent | "0" | PHP_INI_SYSTEM | Disponible depuis PHP 4.3.2. |
| hyperwave.default_port | "418" | PHP_INI_ALL |
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.
À 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
- hw_Array2Objrec — Convertit un tableau en un objet
- hw_changeobject — Change les attributs d'un objet (obsolète)
- hw_Children — Liste des objets ids des objets fils
- hw_ChildrenObj — Liste des objets records des objets fils
- hw_Close — Ferme la connexion Hyperwave
- hw_Connect — Ouvre une connexion Hyperwave
- hw_connection_info — Affiche des informations sur la connexion au serveur Hyperwave
- hw_cp — Copie des objets HyperWave
- hw_Deleteobject — Efface des objets
- hw_DocByAnchor — Identifiant d'objet de l'objet dans l'ancrage
- hw_DocByAnchorObj — Attributs de l'objet dans l'ancrage
- hw_Document_Attributes — Object record de hw_document
- hw_Document_BodyTag — Balise de corps d'un document
- hw_Document_Content — Contenu d'un document
- hw_Document_SetContent — Modifie/remplace le contenu d'un document
- hw_Document_Size — Taille d'un document
- hw_dummy — Fonction sans objet pour Hyperwave
- hw_EditText — Retourne un document texte
- hw_Error — Retourne le code d'erreur
- hw_ErrorMsg — Retourne un message d'erreur
- hw_Free_Document — Détruit un document
- hw_GetAnchors — Identifiants des ancrages d'un document
- hw_GetAnchorsObj — Attributs des ancrages d'un document
- hw_GetAndLock — Retourne les attributs et verrouille l'objet
- hw_GetChildColl — Identifiant d'objets des groupes fils
- hw_GetChildCollObj — Objet record d'un groupe d'enfants
- hw_GetChildDocColl — Identifiant des documents fils d'un groupe
- hw_GetChildDocCollObj — Attributs des documents fils d'un groupe
- hw_GetObject — Lit les attributs d'un objet Hyperwave
- hw_GetObjectByQuery — Recherche un objet
- hw_GetObjectByQueryColl — Recherche un objet dans un groupe
- hw_GetObjectByQueryCollObj — Recherche un objet dans un groupe
- hw_GetObjectByQueryObj — Recherche un objet
- hw_GetParents — Identifiant d'objet des parents
- hw_GetParentsObj — Attributs des parents
- hw_getrellink — Crée le lien depuis la source vers le destinataire, relativement à rootid
- hw_GetRemote — Retourne un document distant
- hw_getremotechildren — Retourne les fils d'un document distant
- hw_GetSrcByDestObj — Retourne les ancrages qui pointent sur un objet
- hw_GetText — Retourne un document texte
- hw_getusername — Nom de l'utilisateur actuellement identifié
- hw_Identify — Identifie un utilisateur
- hw_InCollections — Vérifie qu'un identifiant d'objet est dans un groupe
- hw_Info — Informations à propos d'une connexion
- hw_InsColl — Insère un groupe
- hw_InsDoc — Insère un document
- hw_insertanchors — Insère uniquement des ancres dans du texte
- hw_InsertDocument — Insère un document dans un groupe
- hw_InsertObject — Insère un objet record
- hw_mapid — Représente un id global en un id virtuel local
- hw_Modifyobject — Modifie les attributs d'object record
- hw_mv — Déplace un objet
- hw_New_Document — Crée un nouveau document
- hw_objrec2array — Convertit les attributs d'un objet en tableau
- hw_Output_Document — Affiche hw_document
- hw_pConnect — Crée une connexion persistante
- hw_PipeDocument — Retourne un document
- hw_Root — Objet id de la racine
- hw_setlinkroot — Configure l'identifiant vers lequel les liens sont calculés
- hw_stat — Retourne le statut de la chaîne
- hw_Unlock — Déverrouille un objet
- hw_Who — Liste des utilisateurs actuellement identifiés
Remonter 
