Google Chercher dans diml.org
[ english ]

Table des matières
0. Motivation
1. Caractéristiques du moteur PHP
1.1 Origine de l'implémentation
1.2 Différences majeures avec la version Perl
1.3 Type Mime
2. Installation du moteur DIML/PHP
2.1 Jeu de fichiers
2.2 Dispositif de redirection
2.3 Test de l'implémentation
 Dernières infos
 Une application du composant  WCT_NEWS  
>> Haut de la page

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

0. Motivations du portage

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.

1. Caractéristiques du moteur DIML/PHP

1.1 Origine de l'implémentation

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.)

1.2 Différences majeures avec la version Perl

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.

1.3 Type Mime

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.

2. Installation du moteur DIML/PHP

2.1 Jeu de fichiers

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.

2.2 Dispositif de redirection

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.

2.3 Test de l'implémentation

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