Data Injection Markup Language
Utilisation du DIML à partir du PHP
Auteur: V.G. FREMAUX
E.I.S.T.I. / Cergy, France
Laboratoire de Recherche Appliquée
Nouvelles Technologies de l'Information et de la Communication
Version: 1.0 / Juillet 2003
Etant donné le succès de PHP dans la communauté Web internationale, il était nécessaire, voire indispensable de proposer une version PHP du processeur DIML. Cette implémentation a plusieurs objectifs :
- Garantir une portabilité des pages "écran" entre les deux univers Perl et Php.
- Autoriser un "overscripting" en PHP plutôt qu'en Perl, ce qui sera plus facilement accepté par nombre de développeurs.
- Profiter des développements des librairies Php et du dynamisme de ce langage
- Profiter des avancées en termes de performances du moteur Zend*
Par contre, l'esprit reste le même, celui d'une séparation "sanitaire" entre le monde du design d'interfaces et ses préoccupations, et le monde de la "programmation" dure. Le DIML donnera aux utilisateurs de PHP un bon moyen de rationaliser et formaliser des applications claires, propres, et plus facilement maintenables par une stratégie de "templates" puissante.
(*) Il faudra qu'on m'explique comment, après tant d'effet d'annonce, les performances de la version Perl restent à ce point supérieures.
La version PHP du moteur DIML est en tout points conforme à sa version originale en Perl. Elle s'appuie sur la même spécification du langage et la même structure que le moteur Version 2.6, permettant :
- Le traitement de la spécification de base
- L'invocation de scripts externes (en PHP)
- L'ajout d'extensions de langage (SQL, XML, etc.)
Les différences majeures du moteur Php et du moteur Perl résident essentiellement dans la façon dont il est interfacé avec les scripts utilisateurs (overscripting). Elles concernent donc essentiellement les personnes écrivant des scripts invoqués. On peut les résumer dans le tableau suivant :
Version Perl |
Version Php |
Le tableau associatif d'interface reliant les implémentations perl au moteur DIML est le tableau global %main::ESSInput. Tous les templates et les variables créées par une page DIML y sont accessibles. |
Le tableau Php global $ESSInput sert d'interface entre les implementations de scripts et le moteur DIML. Il joue le même rôle que le tableau ci-contre. |
L'instruction invoque des scripts complémentaires en Perl, sous forme de segments de code (fichiers ".pl") s'exécutant dans la portée Perl "ESSI" (l'invocation est réalisée par un appel à "do"). |
Les scripts complémentaires s'écrivent en PHP dans des fichiers annexes. Le code PHP doit être encadré des marques PHP standard (l'invocation est réalisée par un appel à "include"). |
Les écritures conditionnelles utilisent toutes les ressources syntaxiques Perl, et sont traitées par la fonction "eval" |
Les écritures conditionnelles utilisent toutes les ressources du PHP, et sont traitées par la fonction "eval". Pour des raisons de compatibilité, certaines syntaxes Perl sont transcodées, et demeurent autorisées dans la version PHP |
La méthode d'invocation du moteur par le serveur HTTP est une définition de traitement CGI externe. Sur Apache, elle peut être réalisée par le couple de directives AddType/Action. Elle est compatible avec de nombreux serveurs présentant un mécanisme de redirection CGI standard. |
L'invocation du moteur Php demande la mise en oeuvre du module de réécriture mod_rewrite d'Apache, comme indiqué dans les instructions d'installation ci-après. |
La version PHP du moteur DIML traite des fichiers d'extension .pdim (pour PhpDiml). Le Type Mime de resource de ces fichiers reste inchangé ( application/x-essi-parsed). Le type de sortie après exécution reste majoritairement text/html, sauf mention contraire.
Le moteur PHP est livré sous forme d'un jeu de scripts comprenant :
ESSI.php |
L'amorce de moteur. Il récupère la requête et les paramètres nécessaires à la localisation et au traitement du source DIML.
|
ESSIConf.php |
Le fichier de configuration. Contient les paramètres de configuration du moteur DIML.
|
ESSIParser.php |
Parser principal. L'interpréteur principal (noyau de base).
|
ESSIGen.php |
Librairie générale. Des fonctions utiles à peu près partout.
|
ESSICgi.php |
Adaptateur CGI. Contient des fonctions permettant de translater les paramètres CGI dans le plan DIML, et autres fonctions relatives aux arrivées CGI.
|
ESSIWct.php |
Librairie spéciale Web Component. Des fonctions spécifiques au modèle "Web Component".
|
ESSIXml.php |
Extension XML. Module additionnel.
|
ESSISql.php |
Extension SQL. Module additionnel.
|
Ce jeu de fonctions peut être placé à n'importe quel endroit du système de fichiers qui permette une diffusion de fichiers PHP.
La redirection des fichiers .pdim utilise le moteur de réécriture dynamique d'URL du serveur Apache, connu sous le nom mod_rewrite. Les instructions suivantes sont à placer dans le fichier de configuration httpd.conf d'apache (à partir de la version 1.3.9) :
RewriteEngine on
RewriteRule ^(.*\.pdim)(.*)$ http://{URL_to_DIML_PHP}/ESSI.php?org=%{SCRIPT_FILENAME} [R,QSA,L]
RewriteRule ^(.*\.pdim)$ http://{URL_to_DIML_PHP}/ESSI.php?org=%{SCRIPT_FILENAME} [R]
Qui peuvent être optionnellement complétées par
RewriteLog logs/rewrite.log
RewriteLogLevel 1
Pour le contrôle de la journalisation.
Une fois le redémarrage d'Apache effectué, le fichier de validation dimltest.pdim permet de tester le fonctionnement du processeur.
All material is copyleft V.G. FREMAUX (EISTI France) 1999 to 2003 except explicitly mentioned
|