Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
Publié parMarie-Claire Gobeil Modifié depuis plus de 6 années
1
Initiation au Perl et Utilisation de scripts CGI
CGI en Perl Initiation au Perl et Utilisation de scripts CGI jeudi 27 décembre 2018
2
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 jeudi 27 décembre 2018
3
Initiation au Perl Historique Les atouts du Perl
Les variables en Perl Manipulation des fichiers Les expressions régulières jeudi 27 décembre 2018
4
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) jeudi 27 décembre 2018
5
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 jeudi 27 décembre 2018
6
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 jeudi 27 décembre 2018
7
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 jeudi 27 décembre 2018
8
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"; jeudi 27 décembre 2018
9
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" jeudi 27 décembre 2018
10
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 Euros"; $chaine =~ /-?(\d+)\.?(\d+)/; # $chaine contient alors 18.07 # la variable $1 vaut 18 et la variable $2 vaut 07 jeudi 27 décembre 2018
11
Principe du CGI Définition Schéma CGI avec Perl
jeudi 27 décembre 2018
12
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 TCL Any Unix shell Visual Basic AppleScript jeudi 27 décembre 2018
13
Principe du CGI - Schéma
Client WWW Serveur WWW Requête GET cgi-bin/toto.cgi HTTP/1.0 Démon httpd Exécution Script CGI Page dynamique HTTP 200 OK Server: Apache/2.5 Content-type: text/html <HTML> … </HTML> Affichage de la page jeudi 27 décembre 2018
14
Principe du CGI – avec Perl
Librairies &ReadParse(); # Entrées dans %in Script CGI Entrées (Requête): $ENV{'REQUEST_METHOD'} (GET ou POST), $ENV{'QUERY_STRING'} (méthode GET), STDIN (méthode POST) Sorties (Réponse): STDOUT (En-tête Content-type + HTML) Compilation Exécution jeudi 27 décembre 2018
15
CGI par l'Exemple Mail anonyme Tableau de liens Schéma
Formulaire HTML Script send_mail.cgi Tableau de liens Script link.cgi Affichage jeudi 27 décembre 2018
16
Exemples – Envoi de Mail (Schéma)
form.html Script CGI mail 1ère étape <HTML> … </HTML> 2éme étape jeudi 27 décembre 2018
17
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> jeudi 27 décembre 2018
18
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} $in{text} TAG close(MAIL); Contenu du mail renvoyé jeudi 27 décembre 2018
19
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> Your has been sent...<BR> Thank you for use this page realised by Moi.<BR> <BR> Tschuss! </BODY> </HTML> TAG Page retournée au Client jeudi 27 décembre 2018
20
Exemples – Tableau de liens (schéma)
lien direct: Script CGI 1ère étape data.txt <HTML> … </HTML> 2éme étape jeudi 27 décembre 2018
21
Exemples – Tableau de liens (données)
Fichier links.txt: Francais Aide sur les CGIs Francais Scripts CGI Perl gratuits Francais Aide à l'utilisation des CGIs Francais Toutes sortes de CGIs par thème Francais Des outils web utiles Francais Des cours sympas sur les technos Web en français Francais Docs du Perl en Français Francais news:fr.comp.lang.perl News Anglais Le site officiel du Perl Anglais Perl.com The Source for Perl -- perl development, perl conferences Anglais CGI.pm Le site sur le package Anglais CGI en C Anglais About Perl Anglais Le site de la librairie cgi-lib.pl Anglais The Common Gateway Interface Anglais Des tonnes de bibliothèques vraiment utiles Anglais news:comp.lang.perl.misc News jeudi 27 décembre 2018
22
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 jeudi 27 décembre 2018
23
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 FAVIER</A></FONT></DIV> </CENTER></BODY></HTML> TAG jeudi 27 décembre 2018
24
Exemples – Tableau de liens (affichage)
jeudi 27 décembre 2018
25
Bibliothèques La librairie cgi-lib.pl Le package CGI.pm
jeudi 27 décembre 2018
26
Bibliothèques – librairie cgi-lib.pl
Le site: 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. jeudi 27 décembre 2018
27
Bibliothèques – package CGI.pm
Le site: 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). jeudi 27 décembre 2018
28
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: Autres librairies: jeudi 27 décembre 2018
29
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 jeudi 27 décembre 2018
30
Les SSI - Exemple Fichier example.shtml: jeudi 27 décembre 2018
<!--#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> jeudi 27 décembre 2018
31
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 Oct 26 13:37 addon-modules -rwxr-xr-x 1 root root Nov 18 21:52 example.shtml -rw-r--r root root Nov 18 21:26 fin.html drwxr-xr-x 4 root root Nov 13 23:00 glooton -rw-r--r apache apache 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/ :52:13.<BR> Insertion du fichier fin.html: <BR><B>Ceci est inclus dans le fichier fin.html</B> </HTML> jeudi 27 décembre 2018
32
Comparaisons Les "moins": Les "plus":
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 jeudi 27 décembre 2018
33
Bibliographie et liens
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: : site officiel du Perl : scripts CGI : aide en français sur les technos web : contient une liste de libraires pour le CGI jeudi 27 décembre 2018
34
Fin jeudi 27 décembre 2018
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.