SELFHTML/Aides à la navigation CGI/Perl Éléments de langage Perl |
Instructions CGI nécessaires en Perl | |
Envoyer l'entête HTTP et les contenus |
|
Un script CGI est appelé dans le navigateur Web en envoyant par exemple un formulaire. Ensuite le navigateur communique d'abord avec le serveur Web par le protocole HTTP et réclame le script. Lors de cette réclamation, le navigateur peut aussi envoyer des données tout de suite qui sont conçues pour le script CGI par exemple les données du formulaire HTML rempli. Le serveur Web décide s'il s'agit pour le fichier réclamé par le navigateur d'un script CGI et exécute le script avec l'interpréteur Perl. Pendant ce temps, le navigateur "attend" des données, Car si le navigateur réclame un script CGI du serveur, ce n'est rien d'autre que s'il réclamait un fichier HTML statique. Il attend des données que le serveur envoie et que le navigateur doit afficher dans une étape suivante. C'est pourquoi un script CGI doit envoyer quelque chose au navigateur qui attend. Les données à envoyer doivent l'être à leur tour par le protocole HTTP. Le protocole HTTP réclame cependant pour chaque envoi de données ce qu'on appelle un entête HTTP.. C'est une espèce de paquet de données préliminaires avec des informations sur les données qui suivent. Afin qu'un navigateur puisse interpréter correctement les données du script CGI, le script doit d'abord envoyer un entête HTTP valide.
#!/usr/bin/perl -w use strict; use CGI::Carp qw(fatalsToBrowser); my $texte = "Hallo monde"; print "Content-type: text/html\n\n"; print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n"; print "<html><head><title>Hello monde</title></head><body>\n"; print "<h1>$texte</h1>\n"; print "</body></html>\n"; |
Pour le code HTML q'un script Perl désire envoyer en tant que script CGI au navigateur qui attend, la fonction Perl print est appropriée. Pour "envoyer", le script Perl sort simplement les données avec la fonction print
. La première de ces instructions print
que doit contenir un script CGI, est toutefois celle pour l'entête HTTP. La forme la plus simple d'un entête HTTP comprend simplement dans la commande Content-type:
et la mention d'un type Mime pour les données qui vont suivre. Étant donné que le script CGI veut envoyer du code HTML au navigateur, ça tombe sous le sens, il utilise le type Mime pour HTML, à savoir text/html
. De plus, un entête HTTP doit comprendre deux caractères de contrôle pour le passage à la ligne. En Perl on obtient un tel caractère de contrôle par la suite de caractères \n
. Par l'instruction:
print "Content-type: text/html\n\n";
un entête HTTP complet est donc créé et signale au navigateur que des données du type HTML vont suivre. Pour une communication HTTP complète, d'autres lignes d'entête HTTP sont à vrai dire nécessaires; les mentions manquantes seront alors complétées par le port CGI voire par le serveur Web.
Enfin un petit fichier HTML complet est envoyé au moyen d'instructions print
distinctes. Pour les différentes instructions print
est par ailleurs toujours noté à la fin un caractère de passage à la ligne \n
. Ceci a davantage une raison esthétique. Cela permet d'insérer à chaque fois une nouvelle ligne dans le texte source HTML. Si ces caractères de contrôle manquaient, Perl écrirait tout sur une ligne de texte. Pour la variante print
avec le caractère de contrôle par contre, les passages à la ligne se font comme si le texte source HTML était entré dans l'éditeur.
Dans le titre h1
de l'exemple ci-dessus est sortie une variable, à savoir la scalaire $Text
. Vous pouvez dans des sortie print
insérer simplement de telles variables. À l'endroit correspondant est alors sortie la valeur actuelle de la variable. Dans l'exemple ci-dessus est affectée à la scalaire $texte
, un peu plus haut dans le script, la valeur Hello monde
. On recourt à cette valeur à l'endroit où $texte
doit être noté dans le code HTML à sortir.
Les nombreuses instructions print
distinctes sont pénibles pour des sorties plus importantes. C'est pourquoi il existe aussi une forme plus élégante pour la sortie de passages de code HTML plus importants.
#!/usr/bin/perl -w use strict; use CGI::Carp qw(fatalsToBrowser); my $introduction = "Cela marche aussi comme ça!"; print "Content-type: text/html\n\n"; print <<"FIN"; <html><head><title>Sortie du test</title></head><body> <h1>$introduction</h1> <p>L'avantage de cette formule est que l'on peut générer beaucoup de code HTML en une seule fois sans noter une seule commande print en Perl. Bien pratique par exemple également pour la sortie de JavaScript:</p> <script type="text/javascript"> <!-- document.write("<p>Et voici l'adresse de cette source de données HTML: "); document.write(document.URL+"<\/p>"); //--> </script> </body></html> FIN |
Le script envoie dans un premier temps l'entête HTTP avec une instruction print
distincte. Ensuite une méthode plus élégante est cependant utilisée pour envoyer des quantités plus importantes de code HTML. Ici est d'abord notée l'instruction print <<"FIN;"
. FIN
est un nom à attribuer librement pour un délimiteur de fin . Tout en bas dans le script est noté encore une fois le mot FIN
, et cela seul sur une ligne. Tout ce qui figure entre l'instruction d'ouverture et le délimiteur de fin seul sur une ligne est envoyé tel quel au navigateur. Cette forme de notation est indiquée quand de longs passages de code HTML doivent être envoyés. Le code HTML peut contenir tout ce qui est imaginable, par exemple également des passages JavaScript comme il est montré dans l'exemple, mais aussi des variables Perl! Celles-ci sont interpolées, c'est à dire qu'elles sont remplacées par leur valeur pour la sortie - seulement parce que toutefois print <<"FIN;"
a été noté entre guillemets. La notation entre apostrophes est également permises, donc print <<'FIN;'
. Dans ce cas, les variables Perl ne sont pas interpolées (voir aussi les Règles pour la notation de chaînes de caractères).
Une autre possibilité utilisée souvent, pour envoyer l'entête HTTP et le texte HTML est offerte par le module CGI. Ce module met des méthodes distinctes à disposition pour générer des sorties HTML. Pour l'envoi au navigateur est employée là aussi la fonction print
.
Scalaires (Variables) | |
Généralités sur Perl | |
SELFHTML/Aides à la navigation CGI/Perl Éléments de langage Perl |
© 2001 Stefan Münz / © 2003 Traduction Serge François, 13405@free.fr
selfhtml@fr.selfhtml.org