|









Ingénieurs 2000
Filière Informatique et Réseaux
Projet Système 2001-2002
Christian Favier
|

 |
CGI par l'exemple
  
Envoi de mail - Tableau de liens
  
Envoi de mail
  
Schéma:
Principe de l'envoi de mail anonyme:
L'envoi de mail consiste à envoyer un mail au travers un script CGI réalisé en Perl ici nommé sendmail.cgi.
Le script CGI récupère tout d'abord les données du formulaire HTML. Ces données contiennent l'adresse e-mail de destination et de source, le sujet du mail ainsi que son contenu.
Ensuite, nous allons voir comment utiliser la commande Unix "sendmail" pour pouvoir envoyer le mail.
Et enfin, le script renverra une page HTML confirmant l'envoi du mail.
Le formulaire (form.html):
<FORM ACTION="cgi-bin/send_mail.cgi" METHOD=POST><BR>
From: <INPUT TYPE="text" NAME="from" SIZE=50 MAXLENGTH=200><BR>
To: <INPUT TYPE="text" NAME="to" SIZE=50 MAXLENGTH=200><BR>
Subject: <INPUT TYPE="text" NAME="subject" SIZE=50 MAXLENGTH=200><BR>
Content: <TEXTAREA NAME="text" COLS=50 ROWS=10></TEXTAREA><BR>
<INPUT TYPE="submit" VALUE="submit">
<INPUT TYPE="reset" VALUE="reset"><BR>
</FORM>
Voir l'aperçu (save as pour le sauvegarder): 
Le script CGI (sendmail.cgi):
#!/usr/bin/perl
require "cgi-lib.pl";
# Utilisation de la librairie cgi-lib.pl
# (voir le chapitre sur les bibliothèques)
&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}
$in{text}
TAG
close(MAIL);
print "Content-type: text/html\n\n";
# En-tête pour la réponse aux clients
print <<"TAG";
<HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>
<BODY>
Your e-mail has been sent...<BR>
Thank you for use this page realised by Moi.<BR>
<BR>
Tschuss!
</BODY>
</HTML>
TAG
Télécharger le script: 
Quelques conseils d'utilisation:
Pour tester ce script, vous devez télécharger le formulaire form.html et le placer sur votre serveur (ou chez votre provider).
Ensuite, vous devez aussi télécharger le script sendmail.cgi et le placer dans le répertoire "cgi-bin" de votre serveur.
Il ne faut pas oublier de changer les droits d'exécution sur le fichier sendmail.cgi par la commande:
chmod 755 sendmail.cgi
A noter aussi que vous devez avoir Perl installé sur votre serveur ainsi que sendmail.
Le chemin de Perl est mis à la première ligne du fichier (dans mon exemple, j'ai supposé que la commande perl était dans /usr/bin). Si le script ne marche pas, cette commande peut être située dans un autre répertoire (contacter votre administrateur).
Tableaux de liens
  
Schéma:
Principe du tableau de liens:
Perl est très utile pour mettre en page un fichier de données et notamment une liste et en particulier une liste de liens.
Le fichier links.txt contient une liste de liens. Chaque lien contient sa langue, son URL et une description du site en question.
Le script CGI links.cgi a pour but de transformer ce fichier en page HTML et de le retourner au client WWW.
Ainsi, pour mettre à jour cette page, il suffit de modifier le fichier de données et non de modifier du HTML.
Fichier de données links.txt:
Francais http://www.alianwebserver.com/informatique/internet/cgi/default.htm Aide sur les CGIs
Francais http://www.perl-gratuit.com Scripts CGI Perl gratuits
Francais http://www.lecgi.net Aide à l'utilisation des CGIs
Francais http://www.scripts-fr.com Toutes sortes de CGIs par thème
Francais http://www.webdeveloppeur.com Des outils web utiles
Francais http://guide.ungi.net Des cours sympas sur les technos Web en français
Francais http://www.enstimac.fr/Perl/DocFr/perl.html Docs du Perl en Français
Francais news:fr.comp.lang.perl News
Anglais http://www.perl.org Le site officiel du Perl
Anglais http://www.perl.com Perl.com The Source for Perl -- perl development, perl conferences
Anglais http://stein.cshl.org/WWW/software/CGI CGI.pm Le site sur le package
Anglais http://www.papillion.ne.us/~sthomas/cgi_in_c.html CGI en C
Anglais http://perl.oreilly.com About Perl
Anglais http://cgi-lib.berkeley.edu Le site de la librairie cgi-lib.pl
Anglais http://hoohoo.ncsa.uiuc.edu/cgi The Common Gateway Interface
Anglais http://www.freecode Des tonnes de bibliothèques vraiment utiles
Anglais news:comp.lang.perl.misc News
Les champs sont séparés par des tabulations (\t en Perl).
Télécharger le fichier exemple links.txt: 
Script CGI 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
while (<LINKDATA>) { # Tant qu'il y a des données dans le fichier
# Si la ligne ne commence pas par # et n'est pas vide:
if ((!(/#.*/))&&(/.+/)){
@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\">";
print "$data[1]</A></TD>";
# Affichage de la description:
print "<TD>$data[2]</TD></TR>\n";
}
}
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
Si c'est la première fois que vous lisez du Perl, c'est normal que vous hurliez en vous tirant les cheveux. Il faut savoir que
le Perl est un langage puissant et qui contient de nombreuses fonctionnalités et il est souvent plus facile de coder mais beaucoup
plus compliqué de décrypter le script d'une autre personne.
Ce qui peut être utile avec ce script est que vous pouvez voir l'utilisation des TAGs. Au lieu de faire plusieurs prints, il est
parfois utile d'utilser un TAG (voir la syntaxe du script). Le script fera le print de toutes les lignes jusqu'à la prochaine ligne contenant le TAG (et uniquement le TAG, pas de tab ou autres).
Ce qui est utile aussi, c'est l'utilisation du tableau data qui contient toutes les données d'un lien grâce à la fonction split.
Pour le test sur les motifs, j'ai voulu faire mon petit malin, ou plutôt montré combien Perl est performant dans la recherche de motifs.
En effet, l'expression ((!(/#.*/))&&(/.+/)) teste la variable courante (c'est à dire la ligne courante dans notre cas) pour savoir si la ligne commence par un # (commentaire dans le fichier de données) ou si la ligne est vide.
Ainsi, le script CGI ne prendra pas en compte les lignes vides et les commentaires du fichier de données (links.txt).
Télécharger le script CGI sendmail.cgi: 
Résultat:
Voir le résultat avec le fichier d'exemple: 
Quelques conseils d'utilisation:
Pour utiliser le script CGI, téléchargez links.cgi et mettez le dans votre répertoire cgi-bin.
Changez les droits si besoin (chmod) et créez votre fichier links.txt dans un répertoire data. Pour le fichier de données, séparez bien les champs par des tabulations comme dans l'exemple: links.txt.
Vous pouvez changer de place votre fichier de données en modifiant le script...
Ensuite, vous pourrez voir le résultat en allant directement sur le CGI. Exemple: http://serveur/cgi-bin/links.cgi.
  
Page réalisée par Christian Favier
|