Les scripts CGI
Transcription
Les scripts CGI
Licence professionnelle « Management des organisations » Option « Systèmes d’information et Réseaux » Internet et applications dans l’entreprise (1) Scripts clients et scripts CGI O. Auzende 2010-2011 INTRODUCTION ................................................................................................................................................... 3 PARTIE CLIENT : SCRIPTS CLIENTS ET APPLETS JAVA............................................................................................... 3 PARTIE SERVEURS : SCRIPTS SERVEURS .................................................................................................................. 3 LES SCRIPTS CGI ................................................................................................................................................. 4 1. INTRODUCTION ................................................................................................................................................... 4 2. TESTER DES SCRIPTS CGI.................................................................................................................................... 4 3. PERL ET LE MODULE CGI.PM ............................................................................................................................. 5 4. EXERCICE : REPONSE A UN FORMULAIRE............................................................................................................. 6 5. PERL ET LES BASES DE DONNEES TEXTE............................................................................................................. 6 6. RECOPIE D’UN FICHIER........................................................................................................................................ 7 7. EXERCICE : ARTICLES D’ACTUALITE A LA DEMANDE ........................................................................................... 8 2 Internet et applications dans l’entreprise O. Auzende Introduction Le principal apport d’Internet dans les entreprises est de favoriser les contacts directs entre l’entreprise et ses salariés, l’entreprise et ses fournisseurs, l’entreprise et ses clients. Le commerce électronique croît de façon exponentielle dans le monde ; il dépend totalement de ce que l’on appelle les technologies serveurs permettant de faire des transactions en ligne et des techniques de cryptologie qui permettent de les sécuriser. Dans ce cours, nous ferons d’abord la distinction entre scripts clients et scripts serveurs, en montrant les limites des premiers, puis nous étudierons les principakes technologies serveurs actuelles et les connexions des scripts serveurs aux bases de données relationnelles permettant de mémoriser les informations échangées. Partie client : scripts clients et applets java Un site Web peut être dynamisé sur le poste client soit par des « scripts clients » (scripts en javascript exécutés sur le poste client) soit par des applets java. Une page html qui contient uniquement, outre le HTML, des scripts clients ou des applets java est cependant appelée une page Web statique car son code ne change pas constamment. Scripts clients javascript Un script client javascript est normalement destiné à réaliser des animations ou à contrôler la validité d’un formulaire avant son envoi au serveur. Exemples : o animation : zone.html o récupération de valeur dans une liste de choix : traducteur1.html o récupération de texte dans une zone de texte : traducteur2.html o contrôle de formulaire : controles.html Avant l’arrivée de la technologie Ajax, un script client javascript ne pouvait en aucun cas communiquer avec le serveur dont provient la page dans laquelle il est inséré. Depuis Ajax et JQuery, cette possibilité est envisageable, sous réserve que l’interpréteur javascript ne soit pas désactivé dans le navigateur client (voir dernière partie du cours). Applets java Une applet java dispose d’une zone de la page html dans laquelle elle est insérée et gère cette zone elle-même. Elle peut communiquer avec le serveur dont elle est issue pour lire un fichier, mais pas pour réaliser une interrogation de base de données. Exemples : o dessin dans la zone réservée à l’applet : applet Geometrique dans la page geometrique.html o conversion en euro : applet Convert dans la page convert.html o chargement d’images à partir du serveur : applet ChargeImages dans la page ChargeImages.html o lecture d’un fichier du serveur à partir de l’applet : applet Texte dans la page Texte.html Partie serveurs : scripts serveurs Lors d’une connexion à Internet, lorsqu’un utilisateur (client) demande au serveur auquel il est connecté d’effectuer un traitement (généralement interrogation d’une base de données en réponse à une demande effectuée avec un formulaire), un programme s’exécute en temps réel sur le serveur et renvoie le résultat (généralement une page HTML) au navigateur client. Ce programme est appelé script serveur, car il est exécuté sur le serveur et pas sur le poste client. La page renvoyée est appelée une page dynamique, car elle a été générée à la demande. Plusieurs technologies permettent de générer des pages dynamiquement. La technologie choisie dépend du système d’exploitation de la machine utilisée comme serveur (Windows, Unix, Linux…) et du logiciel serveur luimême (Apache, MIIS, Netscape server …). Ce cours a pour but de présenter les technologies existant actuellement et d’étudier leur interfaçage avec des bases de données : o CGI (sur serveur Apache sous Linux) o ASP (sur serveur MIIS sous Windows) o JSP (sur serveur Tomcat sous Windows ou Linux) o PHP (sur serveur Apache sous Linux ou Windows) 3 Les scripts CGI 1. Introduction La programmation CGI (Common Gateway Interface) permet de construire dynamiquement des documents par un serveur HTTP. Elle est associée au serveur Apache sous Unix et Linux. Les programmes CGI (appelés généralement scripts CGI) sont des scripts serveurs placés dans un répertoire spécifique de l'arborescence du serveur, nommé /cgi-bin, contrôlé par l'administrateur du serveur qui vérifie leur sécurité avant de les rendre accessibles au public. Un script CGI peut être écrit dans de nombreux langages. On utilise : o sous UNIX, les langages PERL, C, C++, Fortran, Pascal, TCL, sh, csh, ksh ou n'importe quel autre shell ; nous utiliserons ici le langage PERL. o sous Windows, le C, le C++, le Visual Basic o sur MAC-OS, essentiellement AppleScript. Dans tous les cas, il faut vérifier que les fichiers possèdent bien les droits d'exécution. Un script CGI peut renvoyer une image, un document HTML, un clip audio, des références vers d’autres documents, etc. Comme le navigateur client doit savoir quel type de document lui est renvoyé afin de pouvoir le traiter correctement, le résultat de l’exécution d’un script CGI doit comporter un en-tête (header) qui précise la nature du document renvoyé. Exemple lorsqu’un script CGI génère une page HTML : l’en-tête ligne blanche de séparation obligatoire corps Content-type: text/html <html> ... </html> 2. Tester des scripts CGI Exemple de page html permettant de tester si les scripts CGI fonctionnent. Cette page test.html appelle le script CGI appelé test.cgi et écrit en langage Perl : Page test.html <html> <head> <title>Page de test</title> </head> <body> <p>Ceci est une page de test dont le but est de vérifier que les scripts CGI fonctionnent avec Apache.</p> <p>Elle contient donc un formulaire réduit à un bouton Valider ; lorsqu'on clique sur le bouton, le script test.cgi doit s'exécuter.</p> <form action="cgi-bin/test.cgi" method="get"> <input type="submit" value="Valider"> </form> </body> </html> Fichier test.cgi #!/usr/bin/perl print "Content-type:text/html\n\n"; print "<html><head><title>Réponse</title></head>"; print "<body><p>Le script CGI est bien appelé en réponse à la page test.html</p></body></html>"; 4 Internet et applications dans l’entreprise O. Auzende On teste des scripts CGI : 1) en mode ligne de commande : perl –cw nomscript.cgi perl nomscript.cgi permet de vérifier la syntaxe d’un script permet de le faire exécuter avec résultat à l’écran 2) avec un serveur Apache, utilisable en hôte local. Dans ce cas : - les fichiers HTML doivent se trouver dans un répertoire spécifique, ici /var/www/htdocs - les scripts CGI doivent se trouver dans un autre répertoire spécifique, ici /var/www/cgi-bin - l’interpréteur PERL se trouve dans le répertoire /usr/bin/perl. L’adresse fournie au navigateur pour l’affichage d’une page HTML est http://localhost/page.html Si cette page HTML contient un formulaire, l’appel au script CGI devant traiter ce formulaire se fait dans la page HTML par <form action="/cgi-bin/nomscript.cgi" > La disquette contient un répertoire htdocs et un répertoire cgi-bin. On doit recopier le contenu du répertoire htdocs dans /var/www/htdocs et le contenu du répertoire cgi-bin dans /var/www/cgi-bin. Pour recopier : o Poste de travail double-clic sur floppy drive icône sur le bureau. Double-clic sur l’icône pour faire apparaître de contenu de la dk. o Applications Outils système Navigateur de fichiers : remonter jusqu’à var, puis descendre dans www (on ira d’abord dans htdocs, puis dans cgi-bin) o Faire glisser les fichiers des deux répertoires de la dk vers les répertoires correspondant de /var/www o Ensuite faire un clic droit sur l’icône de la disquette pour démonter le floppy. Dans le dossier /var/www/cgi-bin, voir les droits des différents fichiers : ls –ail S’ils ne les ont pas déjà, donner ensuite aux scripts cgi les droits d’exécution (taper chmod +x *.cgi). Lancer un navigateur par Applications Internet Firefox. Faire exécuter la page test.html par l’URL http://localhost/test.html et vérifier qu’elle demande bien l’exécution du script test.CGI. 3. PERL et le module CGI.pm Le module CGI.pm, généralement installé avec Apache, automatise le décodage des données provenant d’un formulaire. La page voter.html suivante contient un formulaire demandant l’âge du client ; l’action associée au bouton submit est l’appel du script voter.cgi. Tester cette page par http://localhost/voter.html Page voter.html <html> <head> <title>Pouvez-vous voter ?</title> </head> <body> <h2><center>Avez-vous l'âge de voter ?</center></h2> <h3><center>Premier exemple de passage d'un paramètre d'une page HTML à un script CGI</center></h3> <center> <form method="get" action="cgi-bin/voter.cgi"> <p>Quel est votre âge ? </p> <p>Champ de saisie du paramètre (tester successivement une valeur inférieure à 15, une valeur supérieure à 15 mais inférieure à 18 puis une valeur supérieure à 18):</p> <p><input type="text" name="age" size=3><br></p> <p>Envoi du formulaire : </p> <p><input type="submit" value="OK"></p> </form> </center> </body> </html> 5 Script voter.cgi (emplacement de l'interpréteur perl) (module CGI.pm associé à l'interpréteur) (objet créé par le module) (récupération de la valeur de la variable age) #!/usr/bin/perl use CGI; $query=new CGI; $entree=$query->param('age'); if ($entree>=18) { $voter='oui'; } else { $voter='non'; } print $query->header; print "<html><head><title>Pouvez-vous voter ?</title></head>\n"; print "<body><center><H2>Avez-vous l'âge de voter ?</H2>\n"; print "Vous avez dit que vous avez ",$entree," ans."; if ($voter eq 'oui') { print "<P>Vous êtes majeur, donc vous pouvez voter.</P>\n"; } elsif ($entree < 15) { print "<P>Vous êtes bien trop jeune pour voter...</P>\n"; } else { print "<p>Vous êtes encore trop jeune pour voter...</p>\n"; } print "</center></body></html>\n"; 4. Exercice : réponse à un formulaire 1) Visualisez avec le navigateur le fichier formulaire.html qui se trouve dans le répertoire /var/www/htdocs. On veut écrire en PERL le script CGI chargé, sur le serveur, de répondre à ce formulaire. Exemple à droite de formulaire rempli. 2) Ouvrez avec emacs le fichier formulaire.html et notez les renseignements dont vous aurez besoin dans le script CGI. Il ne faut pas modifier le fichier formulaire.html. 3) Dans le répertoire /var/www/cgi-bin écrivez en PERL le script CGI qui génère, en réponse au formulaire, la page HTML présentée ci-contre à gauche. La page doit être adaptée aux renseignements fournis par le client (sexe, prénom, nom, choix cinéma / théâtre, support). 4) Testez la syntaxe de ce script CGI. Lorsqu’elle est correcte, donnez au script les droits d’exécution. Faites ensuite exécuter formulaire.html par Apache et vérifiez que le script CGI répond correctement à la demande de l’utilisateur. 5. PERL et les bases de données texte Le fichier base.txt suivant comporte une base de données texte qui est une sorte de carnet d'adresses (le séparateur sur chaque ligne est en fait une tabulation) : Fichier base.txt dupont [email protected] explorer francois [email protected] explorer philippe [email protected] opera anne [email protected] explorer anne [email protected] opera 6 Internet et applications dans l’entreprise O. Auzende La page lecture.html demande un nom pour interroger la base de données, et le script CGI répond à la demande : Page lecture.html <html> <head> <title>Interrogation de la base</title> </head> <body> <h1>Recherche d'enregistrements</h1><br> <form method="get" action="/cgi-bin/lecture.cgi"> Nom : <input type="text" name="nom"><br> <input type="submit" value="OK"> </form> </body> </html> Script lecture.cgi #!/usr/bin/perl use CGI; $query = new CGI; $fichier="base.txt"; print $query->header; print "<html>\n<head>\n<title>Interrogation de la base</title>\n"; print "</head>\n<body>\n"; print "<h1>Recherche d'enregistrements</h1>\n<br>"; if ($query->param()) { $search_name = $query->param('nom'); eval { open (GUESTS, "< $fichier") or die "Impossible d'ouvrir $fichier : $!"; while (<GUESTS>) { ($name, $email, $browser)=split /\t/; if ($name =~ /$search_name/i) { print "$name<br>\n$email<br>\n$browser<br>\n<hr>\n"; } } } } print "</body>\n</html>\n"; } 6. Recopie d’un fichier Appeler directement un script autonome (c’est-à-dire sans page HTML associée) est possible. Cela se fait par l’appel à l’URL : http://localhost/cgi-bin/nom-du-script.cgi Exemple de script CGI renvoyant une copie d’un fichier mis sur le serveur (le fichier appelé fichier.txt qui doit lui aussi se trouver dans le répertoire cgi-bin) : Script recopier.cgi #!/usr/bin/perl print "Content-type:text/html\n\n"; print "<html><head><title>Recopie d'un fichier</title></head>"; print "<body><p>Ce script CGI est appelé directement</p>"; print "<p>Il recopie ligne à ligne le fichier appelé fichier.txt pour obtenir le résultat suivant : </p><hr>"; $file="fichier.txt"; open(INPUT,"< $file") or die "impossible d'ouviri le fichier"; while (<INPUT>) { tant qu’il reste des lignes dans on recopie la ligne courante print; print "<br>"; } et on passe à la suivante close INPUT; print "<hr></body></html>"; Ce script est à appeler directement par l’URL http://localhost/cgi-bin/recopier.cgi 7 le buffer INPUT 7. Exercice : articles d’actualité à la demande La page actualites.html (voir ci-contre) propose à l’utilisateur des articles d’actualité ; l’utilisateur choisit le sujet auquel il s’intéresse plus particulièrement : économie, politique, sciences, etc. Mettre cette page dans le répertoire /var/www/htdocs et la visualiser par http://localhost/actualites.html Le fichier listeArticles.txt associe à chaque nom de fichier d'article son sujet, plusieurs articles pouvant bien entendu correspondre au même sujet : economie eco1.txt economie eco2.txt politique politique1.txt politique politique2.txt politique politique3.txt sciences sciences1.txt sciences sciences2.txt sciences sciences3.txt (On a utilisé une marque de tabulation pour séparer le sujet de l'article du nom du fichier correspondant). Lorsque l'utilisateur clique sur le bouton de soumission de la page HTML, on souhaite qu’un script CGI recherche les fichiers des articles correspondant au sujet demandé et renvoie une page HTML contenant les différents articles, séparés par des traits : On vous donne les fichiers listeArticles.txt, eco1.txt, eco2.txt, politique1.txt, politique2.txt, politique3.txt, sciences1.txt, sciences2.txt et sciences3.txt, qui sont tous à mettre dans le répertoire cgi-bin. Regarder avec emacs le code de la page actualites.html.et noter les renseignements nécessaires, puis écrivez le script CGI répondant à la requête de l'utilisateur. 8