![]() |
CGI et HTML |
![]() |
|
![]() |
CGI (Common Gateway Interface) permet au navigateur WWW d'exécuter des programmes sur un serveur WWW. De tels programmes (ou scripts) peuvent par exemple traiter des entrées dans des formulaires faisant partie de fichiers HTML, de sauvegarder les données sur l'ordinateur serveur et de lire les données qui y sont sauvegardées. De cette manière les pages WWW deviennent des terminaux pour des "applications" par exemple pour des commandes de marchandises électroniques ou pour questionner les bases de données.
L' "interface CGI" est disponible quand un serveur WWW, qui
soutient CGI, est installé. Vous pouvez installer
un serveur WWW localement vous même sur votre ordinateur pour y avoir
une interface CGI. Quand vous recevez de l'espace disque pour vos propres pages
chez un fournisseur d'accès sur un serveur WWW public, vous pouvez utiliser
l'interface CGI de ce serveur WWW afin d'employer vos propres scripts CGI
sur le WWW. Votre fournisseur d'accès doit toutefois vous permettre l'accès à
l'interface CGI. En cas de doute, demandez à votre fournisseur d'accès!
L'interface CGI comprend:
La définition actuelle d'interface CGI est la version 1.1. D'autres interfaces nouvelles pour des programmes exécutables en WWW introduites par des constructeurs commerciaux comme Netscape ou Microsoft font à l'interface CGI classique de plus en plus concurrence. L'interface API, par exemple, vient de Netscape, l'interface ISAPI de Microsoft. Les deux interfaces sont optimisées pour les logiciels de serveur des différents fabricants. De plus a été atteinte une performance pour le traitement des données sur le WWW bien supérieure à celle de l'interface CGI. Un avantage déterminant de l'interface CGI reste cependant le fait qu'il s'agit, comme pour HTML, d'un standard commercialement indépendant, gratuit, au dessus des produits.
Perl est encore et toujours le langage de programmation le plus employé pour
les scripts CGI. La raison en est que Perl possède des fonctions très
puissantes, par exemple pour les chaînes de caractères ou pour lire et écrire
des données. L'interpréteur Perl nécessaire pour exécuter un script Perl est
disponible comme freeware pour presque tous les systèmes d'exploitation
et il est installé sur presque tous les ordinateurs serveurs sur le WWW (voir
aussi installer
Perl).
Si vous avez déjà beaucoup d'expérience dans un autre langage de programmation par exemple en C, en Pascal ou en Fortran vous pouvez également utiliser ces langages pour vos programmes CGI. Le problème avec ces langages est que le code que vous composez avec eux n'est exécutable que lorsqu'il a été compilé et que les raccourcis ont été établis pour le système d'exploitation sous lequel il doit être exécuté. Si vous écrivez par exemple un programme en C et que vous vouliez mettre en service ce programme comme programme CGI sur le WWW sur un ordinateur serveur avec un système d'exploitation Unix, le programme doit être compilé sous Unix. Un Compiler C que vous avez peut-être sur votre ordinateur qui tourne sous DOS/Windows ne vous sert dans ce cas à rien.
Dans cette partie il est nécessaire que vous connaissiez HTML et que soient
clairs pour vous les processus fondamentaux de la communication qui soutient CGI
entre l'ordinateur serveur et le navigateur WWW. Lisez à ce sujet avant tout la
partie CGI (Common Gateway Interface)
dans l'introduction de ce document.
![]() ![]() |
HTML et CGI communiquent dans les deux directions: d'un côté il est possible d'appeler des scripts CGI à partir d'un fichier HTML qui est affiché à l'écran; d'autre part un script CGI peut transmettre du code HTML au navigateur WWW que celui-ci sortira ensuite à l'écran.
Un script CGI peut traiter des données transmises par le fichier HTML qui l'a appelé. Un script CGI peut par exemple rechercher dans une base de données le concept dont l'utilisateur a demandé la recherche à l'aide d'un formulaire. Un script CGI peut renvoyer les résultats d'un traitement de données au navigateur WWW sous forme de code HTML. Ainsi un script qui recherche des mots clés dans une base de données peut par exemple renvoyer au navigateur WWW les résultats d'un processus de recherche sous forme de fichier HTML généré dynamiquement.
Les scripts CGI peuvent aussi sauvegarder des données sur le serveur pour les lire ultérieurement. C'est sur ce principe que se basent par exemple les livres de visites ou les forums de nouvelles (tableaux d'affichage). Un utilisateur peut écrire un commentaire dans le formulaire d'un fichier HTML. Lors de l'envoi du formulaire, un script CGI est appelé qui sauvegarde le commentaire dans un fichier. Un deuxième script CGI ou un autre appel du script CGI peut ensuite transmettre tous les commentaires sauvegardés à un navigateur WWW.
Un script CGI peut être appelé d'un fichier HTML de différentes façons:
![]() ![]() |
L'exemple est un processus CGI simple qui explique l'échange alterné entre HTML et CGI: L'utilisateur peut entrer son nom et un commentaire dans un formulaire d'un fichier HTML. Quand il envoie le formulaire, un programme CGI commentaires.pl est appelé. Ce script est écrit en Perl. Il lit les données du formulaire qui lui sont envoyées, en sépare les éléments, et crée un fichier HTML complet dans lequel il écrit les données lues. Le navigateur WWW affiche ce code HTML généré par commentaires.pl à l'écran. Étudiez calmement l'exemple - et ne baissez pas les bras tout de suite à la vue du code du langage Perl!
<html> <head> <title>Page de commentaire</title> </head> <body> <h1>Votre commentaire</h1> <form action="/cgi-bin/commentaires.pl" method=post> Nom: <input size=40 maxlength=40 name="utilisateur"><br> Texte: <textarea rows=5 cols=70 name="commentaire" wrap=virtual></textarea><p> <input type=submit value="envoyer"> </form> </body> </html> |
#!/usr/bin/perl read(STDIN, $données, $ENV{'CONTENT_LENGTH'}); print "Content-type: text/html\n\n"; print "<html><head><title>Ré\;ponse CGI</title></head>\n"; print "<body><h1>Ré\;ponse CGI du programme <i>commentaires.pl</i></h1>\n"; @champformulaire = split(/&/, $données); foreach $champ (@champformulaire) { ($name, $value) = split(/=/, $champ); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $value =~ s/<!--(.|\n)*-->//g; $formulaire{$name} = $name; $formulaire{$value} = $value; print "$formulaire{$name} = $formulaire{$value}", "<br>\n"; } print "</body></html>\n"; |
Dans le fichier HTML est défini un formulaire avec deux champs de saisie. Le premier champ (<input size=40 maxlength=40 name="utilisateur">) est un champ d'une ligne dans lequel l'utilisateur doit entrer son nom. Le deuxième champ (<textarea rows=5 cols=70 name="commentaire" wrap=virtual></textarea>) est un champ de plusieurs lignes dans lequel l'utilisateur peut entrer un texte au choix. En cliquant sur le bouton envoyer (<input type=submit value="envoyer">) le formulaire est envoyé. Ce qui doit advenir des données du formulaire est spécifié dans le repère d'ouverture: avec la mention action="/cgi-bin/commentaires.pl" est appelé un script CGI qui va traiter les données du formulaire envoyées. Les données sont transmises au script CGI avec method=post. Cela signifie que le script reçoit les données comme paramètres de l'entrée standard. C'est exactement comme si vous appeliez un programme sur votre ordinateur avec un paramètre - par exemple, le nom du fichier à ouvrir.
Dans le script Perl commentaires.pl, qui se trouve dans le répertoire
CGI, les données saisies sont lues avec l'instruction read(STDIN,
$données, $ENV{'CONTENT_LENGTH'});.
Ensuite le programme commence à créer le fichier HTML qu'il renvoie au
navigateur WWW. C'est à cela que servent les instructions print, qui
construisent un fichier HTML avec les commandes habituelles. La sortie HTML est
interrompue par l'instruction @champformulaire = split(/&/, $données);.
Cette instruction sépare les données lues dans chaque champ de formulaire en
éléments distincts. C'est dans la boucle définie à la suite, foreach, que le script traite
les données. Les commandes qui semblent assez cryptées servent à transformer
en texte lisible les données transmises. Car les données que le script a
reçues sont codées d'après une convention déterminée - le type Mime application/x-www-form-urlencoded.
Dans ce type de code, les espaces, les signes de changement de paragraphe ainsi que
les caractères spéciaux sont représentés sous forme hexadécimale (voir
aussi flux
de données dans la transmission de formulaires). Après le décodage, le
script Perl rend les données des différents champs du formulaire (à ce stade
nous nous trouvons toujours dans la création du code HTML qui est renvoyé au
navigateur). Àprès la fermeture de la boucle foreach, le script Perl se termine
par la commande finale de création du fichier HTML
Pour l'utilisateur, le fichier HTML contenant le formulaire disparaît maintenant de l'écran, et, à la place, le navigateur WWW construit une nouvelle page qui contient le code HTML créé par commentaires.pl.
L'exemple ci-dessus est conçu pour expliquer l'échange alterné entre HTML
et CGI. Si jusqu'a présent vous n'avez encore jamais fait de Perl et que le
script Perl vous semble complètement incompréhensible, c'est tout à fait
normal. Perl est un langage de programmation puissant mais assez particulier. Les
éléments distincts du langage Perl ne seront pas approfondis plus
précisément ici. Lisez pour cela la partie éléments
de programmation Perl. Avant de vous intéresser de plus près à Perl,
travaillez d'abord le chapitre
CGI
et Perl: conditions/généralités. Vous avez besoin des connaissances
qui y sont prodiguées pour pouvoir faire vos propres scripts CGI.
![]() | |
après:![]() |
![]() |
avant:![]() |
![]() |
Serge François, 13405@free.fr