Initiation au Perl et Utilisation de scripts CGI

Slides:



Advertisements
Présentations similaires
420-B63 Programmation Web Avancée Auteur : Frédéric Thériault 1.
Advertisements

Interactivité et Lingo Interactivité - spécifier le déroulement en fonction des actions de l’usager Ex: Déroulement si l’usager clique Choix dans une liste.
MinExplore l’outil de découverte de la bibliothèque de Mines ParisTech Mars 2016.
GCstar Gestionnaire de collections personnelles Christian Jodar (Tian)
Présentation LabPlus v3. Solution novatrice en Technologies de l’information Solution novatrice en Technologies de l’information Application pour la Gestion.
Logiciel Assistant Gestion d’Événement Rémi Papillie (Chef d’équipe) Maxime Brodeur Xavier Pajani Gabriel Rolland David St-Jean.
Cours de HTML suite 3. Sommaire...  Les formulaires. Les formulaires.  Structure basique du formulaire, balise. Structure basique du formulaire, balise.
Installation De Peakup.  Télécharger le fichier peakup2.4.0.free.zip  Décompresser le fichier extrait sur une Directory de votre choix  Créer un lient.
1 Programmation en C++ IO en C++/SL ● Standard Library ● Types, objets pour IO ● L'entrée de clavier ● Sortie à l'écran ● Fichiers.
Cahier des charges.
Cours 08 SYSTÈME DE FICHIERS
UE2 - M22 Licence acoustique
Nouveautés Version 4.1 et mai 2017.
Cross-Plateform Cours JavaScript
POWER QUERY Les FONCTIONS.
JAVA.
Comment corriger son code sans forcément appeler l’enseignant M2202
Cahier des clauses techniques particulières
I- ANALYSE DU BESOIN / Plan
show dialer interface bri
PHP & MYSQL.
Session 1 6 mars 2017 Plateforme ICONICS Justine Guégan
Les Réseaux Informatiques
5.
Sécurité - Cisco ASA Supervision du contenu
Séminaire Novembre 2006 Zephir : Déploiement et supervision des serveurs Eole.
Les Bases de données Définition Architecture d’un SGBD
Algorithmique demander jeu du pendu.
Ajouter le code dans une page html
Initiation aux bases de données et à la programmation événementielle
Accès aux fichiers en C.
Commande show ip dhcp binding
Généralité sur les bases de données
Commande show ip route ccnp_cch ccnp_cch.
Session 1 31 mai 2017 Plateforme ICONICS Justine Guégan
Javadoc et débogueur Semaine 03 Version A16.
Réalisation d'agents de surveillance Zephir
Asynchronous Javascript And Xml
Python for beginners Qu'est ce que Python
5.
Cyber-Sphinx Séance 2.
Concepts de base de la programmation
Documentation technique (Linux)
Création Et Modification De La Structure De La Base De Données
PROGRAMMATION INFORMATIQUE D’INGÉNIERIE II
Présentation initiale
Package R Markdown: Un outil pour générer des pages html avec R Studio
Programmation Android Bases De Données, SQL-lite
Exercice PHP DEUST TMIC
A. DAAIF ENSET Mohammedia Université Hassan II Casablanca.
G.ELGHOUMARI Université ParisII Panthéon-Assas
Programmation Android Première application Android
Assembleur, Compilateur et Éditeur de Liens
SIO SI3 : Exploitation des données
Systèmes d ’Information : 6a
Informatique de base Pr. Namar Ydriss Cours 1: Introduction
G.ELGHOUMARI Université ParisII Panthéon-Assas
Informatique de base Pr. Namar Ydriss Cours 4: Formulaires
03- Evaluation Access 2003 Cette évaluation comporte des QCM (1 seule réponse) et des Zones à déterminer dans des copies d’écran.
Chapitre 3: Les scriptes
JDepend - Analyse de la qualité du code Java -
Opérateurs et fonctions arithmétiques Opérateurs de relation Opérateurs logiques Cours 02.
Exercices récapitulatifs
PROGRAMMATION ET ENSEIGNEMENT
Tableaux croisés dynamiques sous Excel: des outils simples pour une analyse rapide de jeux de données en cytométrie Camille SANTA MARIA Ingénieur d’étude.
SQL Structured Query Language
Exploitation de vos données
STS Web Services libres Gérer les services libres
Python Nicolas THIBAULT
Les données structurées et leur traitement
Transcription de la présentation:

Initiation au Perl et Utilisation de scripts CGI CGI en Perl Initiation au Perl et Utilisation de scripts CGI jeudi 27 décembre 2018

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

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

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

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

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

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

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

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

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 jeudi 27 décembre 2018

Principe du CGI Définition Schéma  CGI avec Perl jeudi 27 décembre 2018

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

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

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

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

Exemples – Envoi de Mail (Schéma) form.html Script CGI  mail 1ère étape <HTML> … </HTML> 2éme étape jeudi 27 décembre 2018

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

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

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 e-mail 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

Exemples – Tableau de liens (schéma) lien direct: http://serveur/cgi-bin/links.cgi Script CGI  1ère étape data.txt <HTML> … </HTML> 2éme étape jeudi 27 décembre 2018

Exemples – Tableau de liens (données) Fichier 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  jeudi 27 décembre 2018

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

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  jeudi 27 décembre 2018

Exemples – Tableau de liens (affichage)  jeudi 27 décembre 2018

Bibliothèques  La librairie cgi-lib.pl Le package CGI.pm jeudi 27 décembre 2018

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.  jeudi 27 décembre 2018

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).  jeudi 27 décembre 2018

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  jeudi 27 décembre 2018

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

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

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>  jeudi 27 décembre 2018

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

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: 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  jeudi 27 décembre 2018

Fin jeudi 27 décembre 2018