Favier Christian
Exposé Système 2001
CGI en Perl
Initiation au Perl et Utilisation de scripts CGI
samedi 3 octobre 2015
1
Favier Christian
Exposé Système 2001
Sommaire
•
•
•
•
•
•
•
Initiation au Perl
Principe du CGI (Common Gateway Interface)
Exemples (du concret)
Bibliothèques cgi-lib.pl et CGI.pm
CGI en C/C++
Les SSI (Server Side Includes)
Performances et Comparaison
samedi 3 octobre 2015
2
Favier Christian
Exposé Système 2001
Initiation au Perl
 • Historique
•
•
•
•
Les atouts du Perl
Les variables en Perl
Manipulation des fichiers
Les expressions régulières
samedi 3 octobre 2015
3
Favier Christian
Exposé Système 2001
Initiation au Perl - Historique
 • Practical Extraction and Report
Language (ou Pathologically Eclectic Rubbish Lister)
• Créé par Larry Wall (linguiste de formation) en
1987
• Ajout de fonctionnalités grâce au
Web (utilisation des news notamment)
samedi 3 octobre 2015
4
Favier Christian
Exposé Système 2001
Initiation au Perl – Les atouts
 • Gratuit
•
•
•
•
Portable
Facilité d’utilisation
Compilation "automatique"
Fonctionnalités sur la recherche de
motif et les chaînes de caractères
performantes
samedi 3 octobre 2015
5
Favier Christian
Exposé Système 2001
Initiation au Perl – Les variables
 • Variables scalaires:
$count = 0;
$message = "Coucou le monde";
• Listes et Tableaux:
@tableau = (0, 3, 5);
$tableau[0] = 1; # la valeur 0 est remplacée par 1
• Tableaux associatifs:
%user = ("nom", "Dupont", "prenom", "Paul");
# (nom et prenom) = keys, (Dupont et paul) = values
$user {"prenom"} = "Marc"; # Paul devient Marc
samedi 3 octobre 2015
6
Favier Christian
Exposé Système 2001
Initiation au Perl – Les variables
(suite)
 • Variables systèmes:
$_ : Variable scalaire courante
@_ : Variable courante
$! : Message d'erreur système
%ENV : Variables d'environnement
et d'autres comme:
– $$ numéro du process (UNIX)
– $% numéro de la page du device de sortie
– $& la chaîne de caractères correspondant à la dernière recherche
– $' valeur suivant le mot recherché dans la chaîne trouvée
– $( gid réel du process (UNIX)
– $) gid effectif du process (UNIX)
– $* est à 1 si plusieurs lignes contiennent la chaîne recherchée
– $- nombre de lignes imprimées sur la page de sortie
– $+ la dernière correspondance trouvée par une recherche
samedi 3 octobre 2015
7
Favier Christian
Exposé Système 2001
Initiation au Perl –
Manipulation de fichiers
 • Ouverture – Fermeture d'un fichier:
open (FILE, "config.txt");
close (FILE);
• Notion de File Handle:
$ligne = <FILE>;
print FILE "Ajouter un message";
• Entrée et sortie standard:
$line = <STDIN>; # Entree standard (équivalent à <>)
print STDOUT "Message dans la sortie standard";
samedi 3 octobre 2015
8
Favier Christian
Exposé Système 2001
Initiation au Perl – Expressions
Régulières
 • Les nouveaux opérateurs:
– split (/motif/, $chaine):
On découpe une chaîne de caractères en mettant le résultat dans un
tableau:
@list = split (/o/, "coucou");
# $list[0] donne "c", $list[1] donne "uc" et $list[2] donne "u"
- L'opérateur de recherche $chaine =~ /motif/:
L'opérateur =~ retourne "vrai" s'il trouve le motif dans la chaîne
if ($line =~ /coucou/) { print $line; }
# Ici, on affiche que si la chaîne $line contient "coucou"
Note: /motif/ équivaut à $_ =~ /motif/
- L'opérateur de substitution s/modèle/remplacement/:
$msg = "Hihi, haha, hoho";
$msg =~ s/[iao]/ey/g; # $msg est devenu "Heyhey, heyhey, heyhey"
samedi 3 octobre 2015
9
Favier Christian
Exposé Système 2001
Initiation au Perl – Expressions
Régulières (suite)
 • La syntaxe pour les motifs:
Un ou plus +: /ab+c/ match pour abc, abbc, abbbc…
Zéro ou plus *: /ab*c/ match pour ac, abc, abbc, abbbc…
Zéro ou un ?: /ab?c/ match pour ac ou abc
Groupes de caractères []: /[abc]/ match pour a, b ou c
Début de chaîne ^: /^abc/ match les mots commençant par abc
Fin de chaîne $: /abc$/ match les mots finissant par abc
N'importe quel caractère .: /ab.c/ match pour abdc, abzc, abqc, abgc, abcc…
Nombre d'occurrences {}: /ab{1,3}c/ match pour abc, abbc et abbbc
Choix |: /abc|def/ match pour abc ou def
etc…
Séquence de modèles ():
$chaine = "Mon poulet coûte 18.07 Euros";
$chaine =~ /-?(\d+)\.?(\d+)/;
# $chaine contient alors 18.07
# la variable $1 vaut 18 et la variable $2 vaut 07
samedi 3 octobre 2015
10
Favier Christian
Exposé Système 2001
Principe du CGI
• Définition
 • Schéma
• CGI avec Perl
samedi 3 octobre 2015
11
Favier Christian
Exposé Système 2001
Principe du CGI - Définition
• Objectif: Dynamiser les pages
 WWW
• Applications exécutées sur le
serveur HTTP
• Langages supportés:
•C/C++
•Fortran
•PERL
samedi 3 octobre 2015
•TCL
•Any Unix shell
•Visual Basic
•AppleScript
12
Favier Christian
Exposé Système 2001
Principe du CGI - Schéma
Serveur WWW
Client WWW

Requête
GET cgi-bin/toto.cgi HTTP/1.0
Démon httpd
Exécution
Scrip
t
HTTP 200 OK
Affichage
de la page
Page dynamique
CGI
Server: Apache/2.5
Content-type:
text/html
<HTML>
…
</HTML>
samedi 3 octobre 2015
13
Favier Christian
Exposé Système 2001
Principe du CGI – avec Perl
Script CGI
Librairies
&ReadParse();
# Entrées dans %in

Entrées (Requête):
$ENV{'REQUEST_METHOD'} (GET ou POST),
$ENV{'QUERY_STRING'} (méthode GET),
STDIN (méthode POST)
Sorties (Réponse):
Compilation
STDOUT (En-tête Content-type + HTML)
Exécution
samedi 3 octobre 2015
14
Favier Christian
Exposé Système 2001
CGI par l'Exemple
• Mail anonyme

– Schéma
– Formulaire HTML
– Script send_mail.cgi
• Tableau de liens
– Schéma
– Script link.cgi
– Affichage
samedi 3 octobre 2015
15
Favier Christian
Exposé Système 2001
Exemples – Envoi de Mail
(Schéma)
form.html
Script CGI

1ère étape
<HTML>
mail
2éme étape
…
</HTML>
samedi 3 octobre 2015
16
Favier Christian
Exposé Système 2001
Exemples – Envoi de Mail
(formulaire)

<FORM ACTION="cgi-bin/send_mail.cgi" METHOD=POST>
From: <INPUT TYPE="text" NAME="from" SIZE=50 MAXLENGTH=200>
To: <INPUT TYPE="text" NAME="to" SIZE=50 MAXLENGTH=200>
Subject: <INPUT TYPE="text" NAME="subject" SIZE=50 MAXLENGTH=200>
Content: <TEXTAREA NAME="text" COLS=50 ROWS=10></TEXTAREA>
<INPUT TYPE="submit" VALUE="submit"> <INPUT TYPE="reset" VALUE="reset">
</FORM>
samedi 3 octobre 2015
17
Favier Christian
Exposé Système 2001
Exemples – Envoi de Mail
(send_mail.cgi)
#!/usr/bin/perl
require "cgi-lib.pl"; # Utilisation de la librairie cgi-lib.pl (voir plus loin)
&ReadParse; # Récupère les données du Formulaire
$mail = "/usr/lib/sendmail"; # Commande sendmail
$from = $in{from}; # Récupérer de l'adresse mail de l'expéditeur

open (MAIL,"|$mail $in{to}"); # Création d'un pipe
print MAIL <<"TAG";
From: $from
Subject: $in{subject}
To: $in{to}
Contenu du mail renvoyé
$in{text}
TAG
close(MAIL);
samedi 3 octobre 2015
18
Favier Christian
Exposé Système 2001
Exemples – Envoi de Mail (suite
de send_mail.cgi)

print "Content-type: text/html\n\n"; # En-tête pour la réponse aux clients
print <<"TAG";
<HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>
<BODY>
Page retournée
Your e-mail has been sent...<BR>
Thank you for use this page realised by Moi.<BR>
<BR>
Tschuss!
</BODY>
</HTML>
TAG
samedi 3 octobre 2015
au Client
19
Favier Christian
Exposé Système 2001
Exemples – Tableau de liens
(schéma)
lien direct: http://serveur/cgi-bin/links.cgi

Script CGI
1ère étape
<HTML>
data.txt
2éme étape
…
</HTML>
samedi 3 octobre 2015
20
Favier Christian
Exposé Système 2001
Exemples – Tableau de liens
(données)
Fichier links.txt:

Francais
Francais
Francais
Francais
Francais
Francais
Francais
Francais
Anglais
Anglais
Anglais
Anglais
Anglais
Anglais
Anglais
Anglais
Anglais
http://www.alianwebserver.com/informatique/internet/cgi/default.htm
Aide sur les CGIs
http://www.perl-gratuit.com Scripts CGI Perl gratuits
http://www.lecgi.net
Aide à l'utilisation des CGIs
http://www.scripts-fr.com
Toutes sortes de CGIs par thème
http://www.webdeveloppeur.com
Des outils web utiles
http://guide.ungi.net
Des cours sympas sur les technos Web en français
http://www.enstimac.fr/Perl/DocFr/perl.html Docs du Perl en Français
news:fr.comp.lang.perl
News
http://www.perl.org
Le site officiel du Perl
http://www.perl.com
Perl.com The Source for Perl -- perl development, perl conferences
http://stein.cshl.org/WWW/software/CGI CGI.pm
Le site sur le package
http://www.papillion.ne.us/~sthomas/cgi_in_c.html
CGI en C
http://perl.oreilly.com
About Perl
http://cgi-lib.berkeley.edu
Le site de la librairie cgi-lib.pl
http://hoohoo.ncsa.uiuc.edu/cgi
The Common Gateway Interface
http://www.freecode
Des tonnes de bibliothèques vraiment utiles
news:comp.lang.perl.misc
News
samedi 3 octobre 2015
21
Favier Christian
Exposé Système 2001
Exemples – Tableau de liens
(script links.cgi)
#!/usr/bin/perl
print "Content-type: text/html\n\n"; # En-tête de la réponse
print "<HTML><HEAD><TITLE>PERL Search Results</TITLE></HEAD>\n";
print "<BODY bgcolor=#FFFFFF>\n";

print<<"TAG";
<!– ENTETE DU TABLEAU -->
<FONT SIZE=+1><B>CGI en Perl - les liens</B></FONT>
<HR>
<TABLE BORDER=2>
<TR><TD><B>Type</B></TD>
<TD><B>Links</B></TD>
<TD><B>Description</B></TD></TR>
TAG
# Liste des liens du fichier:
print "<CENTER>\n";
open (LINKDATA,"data/links.txt"); # Ouverture du fichier de données
samedi 3 octobre 2015
22
Favier Christian
Exposé Système 2001
Exemples – Tableau de liens
(suite de links.cgi)

while (<LINKDATA>) { # Tant qu'il y a des données dans le fichier
if ((!(/#.*/))&&(/.+/)){ # Si la ligne ne commence pas par # et n'est pas vide
@data = split (/\t/,$_); # On découpe la ligne par tabulation
$type = $data[0]; # Le type est dans la première colonne
if ($data[0] eq $type_before) { # Si le type n'a pas changé
$data[0]=""; # Le type ne sera pas affiché
}
$type_before = $type; # Le type d'avant
print "<TR><TD>$data[0]</TD>"; # Affichage du type
# Affichage du lien:
print "<TD><A HREF=\"$data[1]\" TARGET=\"_blank\">$data[1]</A></TD>";
print "<TD>$data[2]</TD></TR>\n"; # Affichage de la description
}
}
print "</TABLE>"; # Fin du tableau
close (LINKDATA); # Fermeture du fichier
print <<"TAG"; # Dernier affichage
<HR><DIV ALIGN="center"><FONT SIZE=-2>Page réalisé par
<A>HREF="mailto:christian\@favier.as">Christian FAVIER</A></FONT></DIV>
</CENTER></BODY></HTML>
TAG
samedi 3 octobre 2015
23
Favier Christian
Exposé Système 2001
Exemples – Tableau de liens
(affichage)

samedi 3 octobre 2015
24
Favier Christian
Exposé Système 2001
Bibliothèques
• La librairie cgi-lib.pl
• Le package CGI.pm

samedi 3 octobre 2015
25
Favier Christian
Exposé Système 2001
Bibliothèques –
librairie cgi-lib.pl
• Le site: http://cgi-lib.berkeley.edu
• La fonction ReadParse:

Recupère la requête dans le tableau %in quelque soit la
méthode (GET ou POST).
Utilisation:
require "./cgi-lib.pl"; # Utilisation de la librairie
&ReadParse(); # Lancement de la fonction
$champ_toto = $in{toto}; # Récupération du champ toto
• Installation:
Mettre dans le même répertoire que le script.
samedi 3 octobre 2015
26
Favier Christian
Exposé Système 2001
Bibliothèques – package CGI.pm
• Le site: http://stein.cshl.org/WWW/software/CGI
• Méthode param:

Permet de récupérer les paramètres de la requêtre de
l'objet CGI quelque soit la méthode (GET ou POST).
Utilisation:
use CGI; # Pour utiliser le package CGI.pm
$query = new CGI; # Nouvel instance de l'objet CGI
# Récupération du champ toto:
$champ_toto = $query->param('toto');
• Installation:
Mettre dans le répertoire 'lib' de Perl (CGI.pm est souvent
installé par défaut).
samedi 3 octobre 2015
27
Favier Christian
Exposé Système 2001
CGI en C/C++
• Requête dans l'entrée standard
• Réponse HTML dans la sortie
standard (sans oublier l'en-tête)
• Librairie cgic: http://www.boutell.com/cgic
 • Autres librairies: http://www.freecode.com
samedi 3 octobre 2015
28
Favier Christian
Exposé Système 2001
Les SSI (Server Side Includes)
• Code intégré dans le HTML
<!--#cmd arg="xxx">
• 6 commandes SSI:

– config: configuration des SSI
– echo: affichage de certaines variables SSI
– exec: exécution d'une commande shell ou d'un
script CGI
– fzise: affiche la taille d'un fichier
– flastmod: affiche la date de dernière modification
d'un fichier
– include: insertion d'un fichier
samedi 3 octobre 2015
29
Favier Christian
Exposé Système 2001
Les SSI - Exemple
• Fichier example.shtml:

<HTML>
<!--#config timefmt="%d/%m/%y - %H:%M:%S" -->
<!–- Modification du format de la date: "timefmt" avec %d: jour, %m: mois, %y:
année, %H: heure, %M: minute, %S: seconde -->
Nom du fichier: <!--#echo var="DOCUMENT_NAME" --><BR>
Liste des fichiers du répertoire: <BR>
<PRE>
<!--#exec cmd="ls -l" -->
</PRE>
Exécution du script example.cgi: <BR><!--#exec cgi="cgi-bin/example.cgi" --><BR>
Taille du fichier: <!--#fsize file="example.shtml" -->.<BR>
Dernière modification: <!--#flastmod file="example.shtml" -->.<BR>
Insertion du fichier fin.html: <BR><!--#include file="fin.html" -->
</HTML>
samedi 3 octobre 2015
30
Favier Christian
Exposé Système 2001
Les SSI – Exemple (résultat)
• Affichage du fichier example.shtml:

<HTML>
<!-- Modification du format de la date: "timefmt" avec %d: jour, %m: mois, %y:
année, %H: heure, %M: minute, %S: seconde -->
Nom du fichier: example.shtml<BR>
Liste des fichiers du répertoire: <BR>
<PRE>
total 80
drwxr-xr-x
2 apache
apache
4096 Oct 26 13:37 addon-modules
-rwxr-xr-x
1 root
root
607 Nov 18 21:52 example.shtml
-rw-r--r-1 root
root
48 Nov 18 21:26 fin.html
drwxr-xr-x
4 root
root
4096 Nov 13 23:00 glooton
-rw-r--r-1 apache
apache
5333 Sep 12 13:24 index.shtml
</PRE>
Exécution du script example.cgi: <BR>Test dans le fichier example.cgi<BR>
Taille du fichier:
1k.<BR>
Dernière modification: 18/11/01 - 21:52:13.<BR>
Insertion du fichier fin.html: <BR><B>Ceci est inclus dans le fichier fin.html</B>
</HTML>
samedi 3 octobre 2015
31
Favier Christian
Exposé Système 2001
Comparaisons
• Les "moins":
–
–
–
Complexité du langage élevée (par rapport PHP, JSP ou ASP)
Peu lisible (par rapport PHP, JSP ou ASP)
Phase d'exécution: interprétation, compilation + lancement
 d'où naissance du Perl exécutable (ou utilisation du C/C++)
–
Interprétation ligne par ligne (prog fonctionnelle)
 d'où naissance du Perl orienté objet
• Les "plus":

–
–
–
–
–
Bonne portabilité (par rapport ASP ou PHP)
Performance élevée (par rapport ASP ou PHP)
Beaucoup de ressources accessibles (par rapport JSP ou ASP)
Manipulation des fichiers et chaînes de caractères aisée
Recherche de motif performante
samedi 3 octobre 2015
32
Favier Christian
Exposé Système 2001
Bibliographie et liens
• Bibliographie:
–
–
–
–
CGI avec Perl par Eric Hermann - Edition Simon&Schuster Macmillan
Perl 5 par David Till - Edition Simon&Schuster Macmillan
Programmation CGI en Perl (2ème édition) - Edition O'Reilly
Perl 5 par Johan Vromans - Edition O'Reilly
• Liens:

–
–
–
–
http://www.perl.org : site officiel du Perl
http://www.cgi-resources.com : scripts CGI
http://guide.ungi.net : aide en français sur les technos web
http://www.freecode.com : contient une liste de libraires pour le CGI
samedi 3 octobre 2015
33
Favier Christian
Exposé Système 2001
Fin
samedi 3 octobre 2015
34
Descargar

CGI en Perl