SELFHTML

Instructions CGI nécessaires en Perl

Page d'information: vue d'ensemble

vers le bas Envoyer l'entête HTTP et les contenus
vers le bas Envoyer les contenus (forme en alternative)

 vers le bas 

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.

Exemple d'un script CGI complet:

#!/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";

Explication:

Pour le code HTML q'un script Perl désire envoyer en tant que script CGI au navigateur qui attend, la fonction Perl Autre page d'information 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 Autre page d'information 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 Autre page d'information port CGI voire par le Autre page d'information 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 Autre page d'information 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.

 vers le hautvers le bas 

Envoyer les contenus (forme en alternative)

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.

Exemple d'un script CGI complet:

#!/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

Explication:

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 Autre page d'information Règles pour la notation de chaînes de caractères).

Attention:

Une autre possibilité utilisée souvent, pour envoyer l'entête HTTP et le texte HTML est offerte par le Autre page d'information 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.

 vers le haut
page suivante Autre page d'information Scalaires (Variables)
page précédente Autre page d'information Généralités sur Perl
 

© 2001 Stefan Münz / © 2003 Traduction Adresse électronique Serge François, 13405@free.fr
Adresse électronique selfhtml@selfhtml.com.fr