pause-café
destinée aux informaticiens sur plateforme IBM i.
Pause-café #37
PHP
commencons par quelques
rappels :
Serveur WEB et architecture N-tiers
L'origine
de l'informatique est basée sur une Architecture 1 tiers
Le
terminal |
L'ordinateur
central |
A
l'arrivée de la micro-informatique ce shéma a pu
être reproduit en créant des applications
autonomes. (problèmes de duplication des données) |
Pour conserver la convivialité de l'interface graphique tout en centralisant les données, on utilise l'architecture 2 tiers (ou client/serveur) |
revoyons la fameux schéma du gartner's group lié à cette architecture :
Données |
Données |
Données | Données |
Données |
Traitement |
Traitement |
Traitement |
||
présentation |
Données |
|||
Traitement | Traitement |
Traitement |
||
Présentation |
Présentation |
Présentation | Présentation |
Présentation |
présentation
distribuée (rewamping) |
présentation distante (X11) | Gestion distante des
données (client/serveur) |
traitement
distribué (proc. cataloguées) |
bases de données distribuées |
---|
HTTP est un serveur de fichier (proche de FTP en fait) le plus connu étant APACHE
Le standard HTML est un
langage SGML (comme UIM sur l'AS/400) qui est
interprété complétement par la
navigateur sur le poste client: par exemple voici un texte en
<b>GRAS</b> dont une partie est
<font color="#FF0000"> s'affiche : voici un texte en GRAS dont une partie est rouge |
Une page WEB sous WDS client
l'onglet source affiche le source HTML
Sur
l'AS400, HTTP Server for AS/400 (powered by Apache) est une
implémentation d'apache v2
- la configuration est
stockée dans IFS (fichier httpd.conf)
pour éditer la configuration, utilisez la commande EDTF ( wrklnk, puis option 2)
(il s'agit du serveur *ADMIN, accessible sur le port 2001, à lancer par STRTCPSVR)
pour
créer votre premier serveur Apache, tapez comme url
":http://votreas400:2001/HTTPAdmin",
et dans le menu de gauche, choisissez (Create
New HTTP server)
Très
vite il a fallut insérer dans ces pages HTML des
données entreprise
(commandes en attente, stock disponible etc...).
le
langage HTML contient des balises permettant de déclarer des
zones de saisie dans des formulaires
HTML
propose aussi des zones cachées (hidden), des listes
déroulantes et des boutons radio.
Sur le serveur, la norme initiale fut
CGI, qui permet l'appel d'un programme "natif",
chargé de générer du HTML en
réponse. La technique est assez rugueuse mais cela
fonctionne (sur l'AS/400 avec des programmes C ou RPG).
Pour Utiliser CGI en RPG, vous disposez des API suivantes (GAP4 Uniquement)
|
Pour
alléger l'écriture de pgm CGI, la plupart des
plates-formes proposent des langages de script ou l'on
mélange dans un fichier texte, du HTML, du code
(propriétaire) et des ordres d'accès à
la base.
Le serveur contenant un pgm CGI déjà
écrit, traitant ces fichiers "scripts" et retournant au
navigateur la
page HTML après avoir remplacé les ordres
d'accès aux données par les données
elle même.
Cela s'appelle PHP dans le monde linux (souvent associé à la base MYSQL), ASP ou ASP.NET pour Microsoft (avec IIS) et Net.Data avec les bases DB2 chez IBM.
Net.Data est
basé sur la notion de section, une section
représentant soit un page HTML Exemple :
Affiche la liste des 50 premieres appellations vinicoles, trièes par nom.
|
Malheureusement, l'avenir de ce langage semble bien sombre (arrêt de support de la part d'IBM sur toutes les plateformes sauf I5/OS et Z/OS, fermeture des différents forums et autres sites web, etc...)
Pour terminer, l'état de l'art est aujourd'hui de travailler dans une architecture dite 3 tiers, c'est à dire en découplant le serveur de traitement (les programmes souvent placés avec le serveur WEB) des données (pouvant être situées sur un serveur éloigné).
Cette technique est implémentée avec les serveurs d'application (Websphere Application Server ou TOMCAT)
Qu'est-ce qu'un serveur d'applications ? •L'API Servlet 2.2 a été développée afin de permettreà un serveur de traiter des requêtes dans un environnement distribué et plus particulièrement des requêtes HTTP. Les servlet sont ansi un remplacement idéal (basé sur Java) des script CGI. •L'API java
Server Pages 1.1 apporte une
solution à l'un des problèmes soulevé
par les servlets HTTP: l'imbrication du code HTM dans le code JAVA.
(une page JSP est transformée en servlet à
la volée) •Tomcat est un conteneur de servlet (ou serveur d'application) et
implémente ces APIs (et quelques autres) comme le produit
commercial IBM : Webspshere
Application Server. |
Il
s'agit d'écrire des programmes JAVA s'exécutant
sur le serveur et non sur le poste client , le serveur d'application
assurant le lien entre le serveur WEB et la JVM (machine virtuelle
java).Ces programmes java pouvant être des classes autonomes
(servlet) générant du HTML :
ou contenus dans des pages JSP : pages HTML faisant
références à des objets externes [des
beans].
Les
pages JSP permettant d'intégrer du HTML (conçu
par un graphiste) et du code JAVA (écrit par un
développeur) dans un même fichier.
Dans la pratique, il ne faut pas opposer Servlet et JSP et nous
rencontrerons souvent l'architecture Modèle/Vue/Controleur
ou MVC qui consiste à
invoquer une servlet créant un objet
(un client par exemple) puis redirigeant l'affichage vers une page JSP.
La
page JSP affiche ensuite du HTML qui utilise le bean client
(<% client.raison_sociale %> , <% client.solde
%> , etc...)
- puissant, il intègre des fonctions et la possibilité de programmer "objet"
- universel, il est disponible sur toutes les plateformes(Linux, Unix, WIndows et même OS400)
- simple à apprendre (même si la logique imposée par le couple HTTP/HTML oblige parfoit à réinventer la roue)
- Open Source (téléchagrement gratuit, une communauté de développeur impressionnante)
Le code PHP est toujours encadré par des balises le signalant. Les balises possibles sont :
- <?php ?>
- <? ?>
- <% %>
- <script language="php"> </script>
Les plus couramment utilisés sont <?
?>
l'énorme
intéret de cette syntaxe c'est que tout ce qui n'est pas
encadré de <? .. ?> est du HTML, la
plupart des éditeurs HTML (Dreamweaver, Nvu) sont capables
de manipuler le html en ignorant le PHP.
La première chose à
savoir c'est qu'une syntaxe se termine TOUJOURS (sauf quelques
exceptions) par un point-virgule , en cas d'oubli vous verrez
apparaître PARSE ERROR
lors de l'exécution du fichier.
le code suivant | Affiche |
<? echo "Bonjour le monde !" ; ?> |
Bonjour le monde ! |
- vous pouvez déclarer des variables (le nom commence toujours par $ )
- vous pouvez déclarer des tableaux : $montableau[ ]
- le langage possède de nombreuses fonctions intégrées (date par exemple pour récupérer date/heure)
- vous pouvez créér vos propres fonctions : function mafonction(param1, param2 ) { .../... }
le
code
suivant (le point
concatène) |
Affiche |
<? $date = date("d-m-Y"); $heure = date("H:i"); echo("Nous sommes le" . $date ."et il est" . $heure); ?> |
Nous sommes le 13-04-2005 et il est 11:10 |
dans la balise form, vous devez mettre les coordonnées de votre fichier php
dans le fichier php, vous retrouvez les données saisies par $variablephp= $_POST['nom_dans_leformulaire']
le code suivant affiche votre prénom |
<html> <body> <p align="center"> <font size="5" face = "Arial"><b>Entrez votre prénom :<br></b></font> <form method="POST" action ="tp0.php"> <p>Entrez un prénom <input type=text size=30 name="prenom"> <p> <input type=submit value="Valider"> <input type=reset value="Réinitialiser"> </p> </form> </body> </html> |
<html>
<body> <p align="center"> <font size="5" face = "Arial"><b>BONJOUR ! <br></b></font> </p> <?php // recuperation de la variable du formulaire $qui= $_POST['prenom']; // Affichage echo("Bonjour " . $qui . "!"); ?> </body> </html> |
Voyez ici le résultat (l'identification se fait avec l'id php, même mot de passe)
avec MYSQL (extrait) :
- mysql_connect() : connexion à un serveur MYSQL
- mysql_select_db() : choix de la base de données
- mysql_query() : exécution d'une requête
- mysql_num_rows : nombre de lignes retournées
- mysql_num_fileds : nombre de colonnes retournées
- mysql_fetch_row : lecture d'une ligne le résultat est placé dans un tableau indicé (accès par n°)
- mysql_fetch_assoc : lecture d'une ligne, le résultat est placé dans un tableau associé (accès par le nom)
- mysql_close : fermeture de la connexion au serveur
le code suivant liste le contenu d'une table suivant un critère : |
<html> <body> <p align="center"> <font size="5" face = "Arial"><b>Entrez un code appellation :<br></b></font> <form method="POST" action ="tp2MYSQL.php"> <p>Entrez un code (numérique) <input type=text size=30 maxlength=6 name="appel"> <em>par exemple 13,144,...</em></p> <p> <input type=submit value="Valider"> <input type=reset value="Réinitialiser"> </p> </form> </body> </html> |
<html> <body> <p align="center"> <font size="5" face = "Arial"><b>LISTE des APPELLATIONS<br></b></font> </p> <?php // connexion à MYSQL $link = mysql_connect("localhost", "root", "") or die("erreur connexion"); // récupération de la saisie (variable du formulaire) $appel= $_POST['appel']; // construction de la requete $query = "select pr_nom, pr_commune from producteurs where appel_code = ".$appel." order by pr_nom"; $base = "vins"; // on sélectionne la base mysql_select_db($base , $link); ?> <hr> <?php $result = mysql_query($query) or die("Erreur SQL !<br>".mysql_errno()." - ".mysql_error()); ?> Résultat:<br> <?php if (mysql_num_rows($result) == 0): echo("<B>Requete exécutée, mais vide</B>"); else: ?> </div> <TABLE BORDER=1> <TR> <?php // boucle sur les colonnes de la requête for ($i = 0; $i < mysql_num_fields($result); $i++) { echo("<TH>" . mysql_field_name($result,$i) . "</TH>"); } ?> </TR> <?php echo(mysql_num_rows($result) . " lignes"); while($prod = mysql_fetch_row($result)) { echo("<TR>"); // boucle sur les valeurs d'une ligne. for ($j = 0; $j < mysql_num_fields($result); $j++) { echo("<TD>" . $prod[$j] . "</TD>"); } echo("</TR>"); } ?> </TABLE> <?php endif; mysql_close(); ?> </body> </html> |
» AS/400, vous avez dit AS/400 ?
avez vous en tête une annonce IBM concernant un produit nommé PASE ?
PASE (option 33 de l'OS)
était un produit facturable en V5R10 et devient intégré à l'OS et dont
l'installation est conseillée par IBM (pour java, DNS V5, etc...)
il s'agit de tous les binaires AIX (5L) sur l'AS/400 rendant celui-ci
très compatible avec une machine UNIX.
Cette fonctionnalité s'appuie sur le processeur commun à la gamme
Iseries et Pseries (POWER4 et 5, 64 bits) et la capacité de ce dernier
à "switcher" d'un mode, d'un environnement à l'autre
(le processeur possède des instructions propres à l'OS/400)
|
|
Ne confondez pas QSH (le shell de l'OS/400) et PASE (compatible AIX) |
|
|
PHP |
vous pouvez donc maintenant utiliser des produits écrits en php et utilisant mysql
PHPMyAdmin
SPIP
mais vous pouvez, bien sur, accèder à votre base de données DB2/400 en utilisant les routines ODBC
(elles sont présentes en natif sous OS/400 sous le nom de CLI)
le code suivant accède à des fichiers 400 : |
<html> <body> <p align="center"> <font size="5" face = "Arial"><b>LISTE des APPELLATIONS<br></b></font> </p> <?php // connexion à L'AS/400 $link = odbc_connect("AS400", "", ""); if(!odbc_setoption($link, 1, SQL_ATTR_DBC_DEFAULT_LIB, "BDVIN1")) { echo "ERREUR : impossible de travailler avec BDVIN1" ; } // récupération de la saisie (variable du formulaire) $appel= $_POST['appel']; // construction de la requete $query = "select pr_nom, pr_commune from producteurs where appel_code = ".$appel." order by pr_nom"; ?> <hr> <?php $result = $result = odbc_exec($link, $query); ?> Résultat:<br> <?php if ($result == 0): echo ("<B>Error " . odbc_error() . ": " . odbc_errormsg() . "</B>"); elseif (odbc_num_rows($result) == 0): echo("<B>Requete exécutée, mais vide</B>"); else: ?> </div> <TABLE BORDER=1> <TR> <?php // boucle sur les colonnes de la requête for ($i = 0; $i < odbc_num_fields($result); $i++) { echo("<TH>" . odbc_field_name($result,$i) . "</TH>"); } ?> </TR> <?php while(odbc_fetch_into($result , $prod) != FALSE) { { echo("<TR>"); // boucle sur les valeurs d'une ligne. for ($j = 0; $j < odbc_num_fields($result); $j++) { echo("<TD>" . $prod[$j] . "</TD>"); } echo("</TR>"); } ?> </TABLE> <?php endif; odbc_close(); ?> </body> </html> |
Voyez ici le résultat (la connexion se fait avec l'id php, même mot de passe)
ces même routines sont disponibles sous WIN32 (Client Access) sous Linux (toujours Client Access)
et même en version 64 bits pour une partition Linux sur I5
Copyright © 1995,2005 VOLUBIS