SELFHTML/Aides à la navigation CGI/Perl Introduction |
CGI et HTML | |
L'interface CGI |
|
CGI (Common Gateway Interface) est une interface du serveur Web. Elle permet de communiquer les requêtes d'un navigateur Web à des programmes (sur le serveur Web) et à les faire exécuter par ceux-ci. 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 Web 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 Web public, vous pouvez utiliser l'interface CGI de ce serveur WWW afin d'employer vos propres scripts CGI sur le Web. 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!
Pour pouvoir utiliser l'interface CGI, vous avez besoin d'accéder à un certain répertoire sur l'ordinateur serveur, répertoire pouvant contenir des programmes CGI. La plupart du temps ce répertoire reçoit pour nom cgi-bin. Les programmes CGI ou les scripts CGI ne sont exécutés que s'ils se trouvent dans ce répertoire. Lors de l' installation de votre propre serveur Web, vous pouvez déterminer quel va t être le répertoire CGI et comment il s'appelle. Chez un fournisseur d'accès qui vous a installé un espace Web avec l'interface CGI, le répertoire CGI est déjà préparé. Il ne vous restera qu'à copier vos scripts CGI dans ce répertoire (voir aussi installer des scripts CGI sur un serveur Web public).
L'interface CGI n'appelle pas seulement le programme à exécuter ni ne se contente de faire suivre sa réponse, mais il tient à disposition une série de données que le serveur Web sauvegarde, et qu'un script CGI peut lire (et pour une part doit lire), pour pouvoir traiter les données. Le serveur Web sauvegarde ces données dans ce qu'on appelle des Variables d'environnement CGI.
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 Web 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 gratuiciels 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 Visual Basic 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 Web 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 Web les résultats d'un processus de recherche sous forme de fichier HTML généré de façon dynamique.
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 Web.
Un script CGI peut être appelé d'un fichier HTML de différentes façons:
<form>
(exemple: <form action="/cgi-bin/guestbook.pl" method="get">
). L'appel a lieu après l'envoi du formulaire. Les données entrées ou choisies par l'utilisateur sont à la disposition du script pour être traitées. C'est de cette façon que fonctionnent par exemple les moteurs de recherche, les livres de visites ou les paniers d'achat électroniques.<a href="/cgi-bin/statistiques.pl">appeler statistiques du jour</a>
). C'est judicieux pour des scripts CGI qui ne nécessitent aucune entrée de la part de l'utilisateur, mais qui produisent des données fermement établies - par exemple, pour un script CGI qui présente des statistiques d'accès aux pages Web.src
du repère <img>
(exemple: <img src="/cgi-bin/counter.pl">
). Dans ce cas, le script CGI doit cependant renvoyer un fichier graphique dans le format GIF ou JPEG au navigateur WWW. La plupart des compteurs d'accès sont basés sur ce principe.<!-- #exec cgi="/cgi-bin/counter.pl" -->
. C'est très pratique pour incorporer à l'aide d'un script CGI une information dynamique sous forme de texte dans un fichier HTML. Cette forme est intéressante par exemple pour des compteurs d'accès basés sur le texte.<meta>
- à la place d'un autre fichier HTML - l'adresse URI du script CGI exécutable (exemple: <meta http-equiv="refresh" content="0; URL=/cgi-bin/welcome.pl">
).
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 comments.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 comments.pl à l'écran. Étudiez calmement l'exemple - et ne baissez pas les bras tout de suite à la vue du code du langage Perl (c'est à vrai dire plus simple que dans l'exemple et celui-ci ne sert qu'à montrer comment le script CGI accède aux données du formulaire)!
Exemple d'affichage: aperçu (pour envoyer le formulaire, une connexion à Internet est indispensable)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Page de commentaire</title> </head> <body bgcolor="#E0E0E0"> <h1>Votre commentaire</h1> <form action="/cgi-bin/comments.pl" method="post"> <p>Nom:<br><input size="40" maxlength="40" name="utilisateur"></p> <p>Text:<br><textarea rows="5" cols="50" name="commentaire"></textarea></p> <p><input type="submit" value="envoyer"></p> </form> </body> </html> |
#!/usr/bin/perl -w use strict; use CGI::Carp qw(fatalsToBrowser); read(STDIN, my $donnees, $ENV{'CONTENT_LENGTH'}); my @champs_formulaire = split(/&/, $donnees); my ($champ, $nom, $valeur); my %formulaire; foreach $champ (@champs_formulaire) { (my $nom, my $valeur) = split(/=/, $champ); $valeur =~ tr/+/ /; $valeur =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $valeur =~ s/</</g; $valeur =~ s/>/>/g; $formulaire{$nom} = $valeur; } print "Content-type: text/html\n\n"; print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">', "\n"; print "<html><head><title>CGI-Feedback</title></head>\n"; print "<body><h1>avis CGI du programme <i>comments.pl</i></h1>\n"; print "<p><b>nom:</b> $formulaire{utilisateur}</p>\n"; print "<p><b>commentaire:</b> $formulaire{commentaire}</p>\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="50" name="commentaire"></textarea>
) est un champ de plusieurs lignes dans lequel l'utilisateur peut entrer un texte de son 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/comments.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 comments.pl,, qui se trouve dans le répertoire CGI, les données saisies sont lues avec l'instruction read(STDIN, my $donnees, $ENV{'CONTENT_LENGTH'});
});.
Avec l'instruction @champs_formulaire = split(/&/, $donnees);
les données lues dans chaque champ de formulaire sont séparées 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 données de formulaires).
Après le décodage, le script commence la création du fichier HTML qu'il retourne au navigateur. C'est à cela que servent les instructions print
, qui construisent un fichier HTML avec les commandes habituelles. Dans l'exemple, le script Perl sort les contenus des deux champs de formulaire après formatage, dans le navigateur.
Pour l'utilisateur, le fichier HTML contenant le formulaire disparaît maintenant de l'écran, et, à la place, le navigateur Web 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. Au le cours de ce chapitre, vous en apprendrez plus sur les différentes commandes. Il existe aussi des techniques telles que le module CGI, qui facilite la programmation CGI avec Perl.
Installer un serveur Web localement sur un ordinateur personnel | |
Livre d'images à feuilleter | |
SELFHTML/Aides à la navigation CGI/Perl Introduction |
© 2001 Stefan Münz / © 2003 Traduction Serge François, 13405@free.fr
selfhtml@fr.selfhtml.org