1 nouvelles techniques danimation dun site internet / intranet ensmp/cri, 8 décembre 2000 ---...
Post on 03-Apr-2015
107 Views
Preview:
TRANSCRIPT
1
Nouvelles techniques d’animation d’un site Internet / intranet
ENSMP/CRI, 8 décembre 2000---
Laurent DAVERIO
2
Table des matières
http://sources.trad.org … 3 ht://Dig … 5 Langages de script … 8 Systèmes de génération dynamique de
pages Web … 13 SGBD / Annuaires … 39 Boite à outils Perl … 48 Analyse de trafic … 64
3
Sources de logiciels libres
http://sources.trad.org
4
http://sources.trad.org Au départ, un bloc-notes personnel pour noter les
adresses de téléchargement d’un certain nombre de logiciels libres ou gratuits « intéressants ».
La notion d’ « intéressant » est assez subjective… Pour une vision plus
exhaustive, voir par exemplewww.appwatch.com
Recherche de logiciels par nom / description, catégories
Réalisation : HTML::Mason OpenLDAP
5
ht://Dig
Le moteur d’indexation et de recherchele plus répandu dans le domaine du
logiciel libre
http://www.htdig.org/
6
ht://Dig 3.2 Un moteur relativement classique :
Robot de parcours de page (htdig) Respecte évidemment les « Robot Exclusion Rules » Paramétrage du parcours via des balises <META> spécifiques
Moteur d’indexation (htmerge) Types de documents : texte ASCII, HTML, Postscript, PDF (via
xpdf ou Acrobat Reader), autres (via convertisseurs à développer soi-même)
Indexation « floue » (htfuzzy) phonétique (soundex, metaphone) par racine (à partir d’un dictionnaire) par synonymes (à partir d’une table de correspondances)
Moteur de recherche (htsearch) Utilisé sous forme de CGI
7
Caractéristiques
Points forts Efficacité, relative facilité de mise en oeuvre Compatible avec Windows (via bibliothèques Cygwin)
Limitations Certains types de recherche manquent
Recherche d’expressions : implémentée depuis la version 3.2 (bêta)
Recherche par proximité : en projet Personnalisation des résultats un peu malaisée
Passage obligé par le CGI htsearch, qui oblige éventuellement à un retraitement par un « wrapper » du HTML produit.
8
Langages de script
Perl, Python, Zend, …
9
Introduction
3 langages principaux : Perl, Python, Zend Caractéristiques :
Utilisables à la fois en contexte statique ou dynamique
Statique : préparation des données, mise en forme des pages à l'avance (préprocesseurs)
Dynamique : génération des pages à la volée Utilisables également comme langage de script
généraliste Administration système Traitement de données Processus lancés périodiquement par crontab
10
Perl 5.6 Un langage "maximaliste"
Mélange de shell, sed, awk, C, BASIC, … Plein de pièges pour les néophytes et les autres. « Il y a toujours plus d'une façon de résoudre un problème ».
Outils et types de données évolués Intérêt : résoudre en une ligne une problème qui demande
normalement 3 ou 4 lignes de code découper une chaîne, rechercher une occurrence dans une liste, …
Exemples : expressions régulières, listes, tableaux associatifs,… CPAN : "Comprehensive Perl Archive Network"
(http://www.cpan.org/, plus de très nombreux miroirs dans le monde) :
Une bibliothèque de modules très étendue. Dont un module CPAN qui automatise l’installation d’autres modules
Mais ces modules ne sont pas, en majorité, fournis dans la distribution standard.
http://www.activestate.com
http://www.perl.com
11
Python 2.0 Langage de type intermédiaire
Plus "propre" que les langages de scripts traditionnels … en particulier, plus propre que Perl ;-)
Langage à objets plus simple à utiliser que Java Syntaxe simplifiée Langage "interprété" (compilation en bytecode à la volée) Passerelle avec Java : Jpython (interpréteur 100% pure Java)
Possibilité de réaliser des Applets Java en JPython Une bibliothèque de modules standard très complète
Modules réseau (sockets, FTP, HTTP, …) Tkinter : une bibliothèque graphique basée sur Tcl/Tk
portable sous X11 et Windows
Langage jeune, en pleine expansion Plusieurs outils significatifs sont déjà écrits en Python
Zope, BSCW, scripts d'installation et de configuration de RedHat Linux, …
http://www.python.org
12
Zend Zend est le langage de PHP 4
Réécriture complète du langage de PHP3 Amélioration importante des performances (précompilation) Modification de l’architecture (allocation mémoire, …) Meilleur découpage des tâches
PHP 4 devient multi plate-formes (IIS, Apache, NS, Roxen, …)
Syntaxe proche de celle de C ou de Perl Zend est un langage extrêmement riche en fonctions de toutes
sortes Exemples : manipulation de fichiers, d’images, de boites à lettres
IMAP, de SGBD (MySQL, …), d’annuaires LDAP, gestion de sessions… Avantage : tout est intégré en standard Inconvénient : il n’y a pas la notion de modules comme en Perl
Comme Perl, ce n’est pas un vrai langage à objets Notion de classes PHP, qui encapsulent variables et méthodes
Zend, un « sous Perl » ?
http://www.zend.com
13
Systèmes de génération dynamique de pages Web
CGI, ASP, ePerl, PHP, ASP, Mason, Coldfusion, …
14
Introduction Classés par flexibilité décroissante, et vitesse de
développement croissante : Génération par script de bout en bout
CGI (Common Gateway Interface) Java Servlets (avec serveur d'applications Java)
Inclusion d'un script dans une page HTML ASP (Active Server Pages) PHP (PHP : Hypertext Processor) ePerl (Embedded Perl) et équivalents (Mason / EmbPerl / EP)
Extension "HTML-like" côté serveur CFML : ColdFusion Markup Language (ColdFusion) RXML : Roxen Macro Language (Roxen Challenger) DTML : Document Template Markup Language (Zope)
15
CGI - Common Gateway Interface Le premier système généralisé de génération
dynamique de pages Avantages : généralité, flexibilité
Flexibilité dans le choix du langage C, Perl, Python, shell Unix, Visual Basic, …
Flexibilité dans les types de contenus HTML, image fixe ou animée, …
Flexibilité dans le choix du serveur HTTP Inconvénients :
"fork" : chaque appel crée un nouveau process Solutions : variantes "persistantes" (PCGI, FastCGI, …)
"stateless" : pas de mémoire d'un appel à l'autre L'application doit gérer elle-même les sessions d'utilisation
(paramètres URL, cookies, …)
16
CGI - Principe de fonctionnement
1. Le client Web (navigateur) envoie une requête HTTP au serveur Web
2. Le logiciel serveur Web (Apache, IIS) détermine qu'il s'agit non pas d'une requête de service de fichiers, mais d'une requête CGI (exécution de programme) Mécanismes : chemin d'accès (cgi-bin), extension (.cgi)
3. Le logiciel serveur Web démarre le programme CGI sur la machine hôte (création de processus), lui transmet un certain nombre de variables d'environnement et de paramètres utilisateur (champs de formulaire, …) Le programme CGI génère typiquement du code HTML, une
image GIF (compteur), …
4. La sortie standard (STDOUT) du programme CGI est redirigée vers le logiciel serveur Web, qui la retransmet à l'utilisateur
17
CGI - Exemple en Perl (variante 1)
http://www.serveur.org/cgi-bin/exemple.cgi?nom=Laurent
#! /usr/local/bin/perluse CGI; # module perl CGI.pm$q = new CGI; $nom = $q->param("nom"); print "Content-type:text/html\n\n";print "<HTML>"; print "<HEAD>";print "<TITLE>CGI qui dit bonjour à $nom</TITLE>"; print "</HEAD>"; print "<BODY>"; print "Bonjour $nom !"; print "</BODY>"; print "</HTML>";
18
CGI - Exemple en Perl (variante 2)
http://www.serveur.org/cgi-bin/exemple.cgi?nom=Laurent
#! /usr/local/bin/perluse CGI; # module perl CGI.pm$q = new CGI; $nom = $q->param("nom"); print
"Content-type:text/html\n\n", "<HTML>", "<HEAD>", "<TITLE>CGI qui dit bonjour à $nom</TITLE>", "</HEAD>", "<BODY>", "Bonjour $nom !", "</BODY>", "</HTML>";
19
CGI - Exemple en Perl (variante 3, avec syntaxe « here document »)
http://www.serveur.org/cgi-bin/exemple.cgi?nom=Laurent #! /usr/local/bin/perl
use CGI; # module perl CGI.pm$q = new CGI; $nom = $q->param("nom"); print << FIN;Content-type:text/html
<HTML><HEAD> <TITLE>CGI qui dit bonjour à $nom</TITLE></HEAD><BODY> Bonjour $nom !</BODY></HTML>FIN
20
CGI - Exemple en Perl (variante 4, avec module Text::Template)
http://www.serveur.org/cgi-bin/exemple.cgi?nom=Laurent #! /usr/local/bin/perl
use CGI; use Text::Template;$q = new CGI; $nom = $q->param("nom"); print Text::Template->fill_this_in(<<FIN);Content-type:text/html
<HTML><HEAD> <TITLE>CGI qui dit bonjour à {$nom}</TITLE></HEAD><BODY> Bonjour {$nom} !</BODY></HTML>FIN
21
PHP 4.0 Un langage "enfoui" (embedded) dans le HTML
Possibilité d'utiliser des outils visuels (Dreamweaver 3) Avantages :
Tout intégré (cf. Zend) mod_php : accélération du démarrage des pages PHP sous
Apache Souvent préinstallé. Exemples :
php fait partie des principales distributions Linux. php est disponible chez plusieurs fournisseurs d’accès, dont Free
(http://www.free.fr) et Multimania. Inconvénient :
Langage spécifique Zend présente de nombreuses similitudes, vraies ou fausses, avec
Perl Langage moins extensible que Perl ou Python
Très à la mode en ce moment, notamment en France
http://www.php.net
22
PHP - Exemple http://www.serveur.org/exemple.php?nom=Laurent
<HTML><HEAD> <!–- lecture du paramètre (commentaire HTML)--> <? $nom = $HTTP_GET_VARS["nom"]; ?> <TITLE> PHP qui dit bonjour à <?php echo $nom; ?> </TITLE></HEAD><BODY><? # Corps du document (commentaire php)
echo "Bonjour $nom !";?></BODY></HTML>
23
ePerl 2.2 Modification du parser standard Perl
Extension de l’approche du module Text::Template : Inclusion de code Perl dans des fichiers texte
Inversion de la dépendance code / texte Au départ, pas de lien obligé avec le Web
ePerl peut s’utiliser depuis la ligne de commande comme langage de script généraliste
Utilisation pour le Web Intégration de Perl dans des pages HTML (.phtml, .epl)
Intérêt : temps d'apprentissage nul quand on connaît Perl Utilisable comme CGI ou via mod_perl (handler Apache::ePerl)
Démarche très proche de celles des CGI classiques Très grande simplicité conceptuelle
Mais des incertitudes sur son avenir Pas d’évolution depuis la version 2.2 de 1998
Possibles problèmes de compatibilité avec les nouvelles versions de Perl
http://www.engelschall.com/sw/eperl/
24
ePerl - Exemple http://www.serveur.org/exemple.phtml?nom=Laurent
<HTML><HEAD> <? use CGI; # module perl CGI.pm $q = new CGI; $nom = $q->param("nom"); !> <TITLE>ePerl qui dit bonjour à <?=$nom!></TITLE></HEAD><BODY><? # Corps du document (commentaire Perl)
print "Bonjour $nom !";!></BODY></HTML>
25
Mod_perl 1.24 Mod_perl associe un interpréteur Perl résident à Apache
Possibilité de paramétrer le comportement d’Apache depuis Perl Comme le ferait un module Apache classique, écrit en C
Emulation du fonctionnement des CGI en Perl (Apache::Registry) Avantages : performances accrues
Pas de création de processus, ni de lancement de l’interpréteur Perl à chaque requête utilisateur
Inconvénients : Complexité d’utilisation la persistance de l’interpréteur interdit les mauvaises habitudes de
programmation normalement autorisées par Perl Variables non déclarées ni initialisées, variables globales, …
Extension des possibilités par rapport aux CGI classiques Partage de variables entres sessions Gestion de sessions au niveau du serveur (Apache::Session) Gestion de caches persistants
Préchargement de modules Perl Cache de code (précompilation de scripts) et de données (variables de
session, résultat d’une requêtre SQL, …)
http://perl.apache.org
26
HTML::Mason 0.89 Approche de développement par composants
Découpage d’une page en « briques » Chaque composant est converti en une fonction Perl
Il peut donc recevoir des paramètres et/ou renvoyer une valeur Plus évolué que la notion d’inclusion de ePerl ou ASP.
Système de génération dynamique étroitement lié à Apache Un bon compromis pour utiliser mod_perl :
Gain de vitesse sensible par rapport au même code CGI De nombreux garde-fous pour ne pas tomber dans les pièges de
mod_perl (programmer « propre ») Gestion de caches pour le code et les données Gestion de versions (production / développement) Prévisualiseur permettant de simuler diverses conditions
d’utilisation (date/heure, navigateur, adresse source, …) Debugger / Profiler pour l’optimisation de code
http://www.masonhq.com/
27
HTML::Mason - Exemple http://www.serveur.org/exemple.html?nom=Laurent
<HTML><HEAD> <TITLE>Mason qui dit bonjour à <%$nom%></TITLE></HEAD><BODY><%perl> # Corps du document (commentaire Perl)
$m->out ("Bonjour $nom !");</%perl></BODY></HTML>
<%args> $nom => ’’</%args>
28
HTML::Embperl 1.3 Une approche qui s’éloigne encore plus que Mason d’un
« embedded Perl » simple tel que ePerl ou ASP. Exemples :
Délimiteurs : [+… +] : blocs à afficher [- … -] : blocs à exécuter, mais à ne pas afficher [$ … $] : méta-commandes Embperl
if/endif, while/endwhile, do/until, foreach/endforeach, … Raccourcis pour générer des tables HTML ($row, $col)
Des possibilités étendues, liées essentiellement à l’utilisation de mod_perl
%fdat, @ffld : paramètres de la requête (formulaire) Gestion de sessions (Apache::Session)
Paramètres sauvegardés par utilisateur (%udate) ou par page (%mdat)
Des performances liées également à l’utilisation de mod_perl
http://perl.apache.org/embperl/
29
HTML::Embperl - Exemple http://www.serveur.org/exemple.html?nom=Laurent
<HTML><HEAD> [- $nom = $fdat{’nom’} -] <TITLE>Embperl qui dit bonjour à [+$nom+]</TITLE></HEAD><BODY> [# Corps du document (commentaire Embperl) #] [+ "Bonjour $nom !" +]</BODY></HTML>
30
ASP - Active Server Pages Un système essentiellement propriétaire…
Version Microsoft des systèmes de type "Embedded xyz" Langages préconisés au départ : VBScript, Jscript (variante de Javascript)
Un système très simple d’utilisation Inclusion de blocs d'instructions de programme dans une page HTML
Possibilité d'utiliser des outils visuels (Dreamweaver 3) Un environnement accessible par le biais d'objets spécialisés
Request, Response, Server, Session, … Interface ISAPI : pas de création de processus pour traiter les requêtes
Meilleurs temps de chargement qu'un CGI a priori Gestion de caches de pages et de variables de sessions
Plate-forme typique : IIS sous Windows NT Intel Un portage commercial sous Unix existe (par Chili!Soft)
… mais pas totalement incompatible avec l'emploi de logiciels libres Point commun : Perl !
Sous Unix/Apache/mod_perl : module Apache::ASP Sous WinNT/IIS : PerlScript (composant de ActivePerl)
http://www.apache-asp.org/
31
ASP - Exemple en Perlscript http://www.serveur.org/exemple.asp?nom=Laurent
<%@ language=perlScript %><HTML><HEAD> <!–- lecture du paramètre (commentaire HTML)--> <% $nom = $Request->querystring("nom")->item; %> <TITLE>ASP qui dit bonjour à <%=$nom%></TITLE></HEAD><BODY><% # Corps du document (commentaire Perl)
$Response->write("Bonjour $nom !");%></BODY></HTML>
32
ColdFusion 4.0 Allaire : http://www.allaire.com Le moteur dynamique le plus utilisé aux Etats-Unis
4% des sites (ASP : 2%) Utilisation de balises supplémentaires : CFML (Cold Fusion Markup
Language) Syntaxe conforme à celle de HTML/XML -> utilisation possible dans des éditeurs
HTML, par exemple Dreamweaver Développement extrêmement rapide quand on se trouve dans les cas
prévus : Interrogation de bases de données SQL (<CFQUERY>) ou LDAP (<CFLDAP>) Applications de messagerie : envoi (<CFMAIL>) et réception (<CFPOP>) de
courrier électronique Interaction avec d’autres serveurs (<CFFTP>, <CFHTTP>)
Dans les autres cas, langage moins expressif qu’un langage de script « classique » comme Perl
Et lisibilité du code moins bonne (conflit entre les indentations HTML et les indentations CFML)
33
ColdFusion - Exemple http://www.serveur.org/exemple.cfm?nom=Laurent
<HTML><HEAD><CFOUTPUT><TITLE>CFML qui dit bonjour à #nom#</TITLE></HEAD><BODY>Bonjour #nom# :</TITLE></CFOUTPUT></BODY></HTML>
34
Roxen Challenger Un serveur Web modulaire et flexible
Interprété (écrit en Pike, langage proche de C) Administrable graphiquement (https://… via SSL) De nombreux modules
Gestion de la sécurité et des droits d'accès. Connections à des bases de données (SQL, LDAP, …). Génération dynamique de graphiques (texte graphique , diagrammes).
Un langage de macros, RXML. RXML est assez similaire à CFML (ColdFusion)
Limitations RXML doit souvent être complété par de l’ « embedded Pike » Les avantages de Roxen par rapport à ses concurrents touchent
surtout à l'accessoire (opinion personnelle). Génération de graphiques, module "Wizard", … CFML est plus aisé à utiliser en règle générale.
http://www.roxen.com/
35
Roxen – Exemple de RXML http://www.serveur.org/exemple.rxml?nom=Laurent
<HTML><FORMOUTPUT><HEAD> <TITLE>RXML qui dit bonjour à #nom#</TITLE></HEAD><BODY>Bonjour #nom# !</BODY></FORMOUTPUT></HTML>
36
Quid d’un « Embedded Python » ?
Il n’y a pas à l’heure actuelle de système à la fois simple et performant pour incclure du Python dans du HTML
Différents systèmes existent pourtant : ASPy, PMZ, ePython, … mais sont essentiellement du domaine expérimental
Voir http://sources.trad.org pour plus d’informations
Il existe par contre un système performant, mais complexe, à base d’objets Python : Zope
37
Zope (Z Object Publishing Environment) Un système de publication d'objets écrit en Python
Tous les fichiers sont remplacés par des objets gérés par une base de donnée objets, ZODB.
Ces objets sont tous manipulables via une interface Web. Possibilité toutefois d'utiliser les outils usuels (éditeurs, …)
Un serveur FTP intégré assure l'import/export des objets vers des fichiers.
Objet = meilleure réutilisabilité des développements. Modèle de sécurité et de délégation puissant
Conçu pour un travail collaboratif entre développeurs, administrateurs, responsables de contenu, …
Un système tout intégré Peut être servi par Apache ou par son propre serveur HTTP,
Zserver. Intègre un SGBDR léger, gadfly (écrit en Python), et un
système d'indexation (Zcatalogs).
http://www.zope.org/
38
Zope – Exemple de DTML http://www.serveur.org:8080/exemple?nom=Laurent
<HTML><dtml-let expr="REQUEST.form['nom']"><HEAD> <TITLE> DTML qui dit bonjour à <dtml-var nom> </TITLE></HEAD>
<BODY>Bonjour <dtml-var nom> !</BODY></dtml-let></HTML>
39
SGBD / Annuaires
GDBM, Berkeley DB, MySQL, PostgreSQL, OpenLDAP
40
Des bases de données pour le Web
Pourquoi ? Assurer le stockage des données associées à un site
dynamique Exemple : catalogue d'articles
Quel type de base de données ? Fichiers texte Fichiers DB / DBM Bases de données relationnelles (SGBDR) Serveurs d'annuaires LDAP
41
Fichiers texte Qu'est-ce que c'est ?
Fichiers texte (ASCII) ordinaires Caractéristiques
Facilité d'édition et de mise à jour (éditeur de texte) Mécanisme d'accès : lecture séquentielle
Certains systèmes permettent d'appliquer des requêtes SQL (relationnelles) aux fichiers texte.
Module DBD::CSV (Perl) Drivers ODBC
Performances modestes Initialisation : nécessité de lire la totalité du fichier en
mémoire. Se limiter à quelques dizaines d'enregistrements. Aucun mécanisme de contrôle d'intégrité référentielle Utilisation de préférence en lecture seule
42
Fichiers DB / xDBM Qu'est-ce que c'est ?
Famille de formats de stockage "clé -> valeur". Un algorithme de hachage permet d'accéder efficacement aux valeurs
à partir des clés. Caractéristiques
Formats standard sous Unix. Correspondance transparente avec le type "tableau associatif"
dans certains langages de script (Perl, Python). Mal adapté pour représenter l’équivalent d’un SGBD relationnel
1 clé + 1 valeur = 2 colonnes … Pas de notion d’intégrité référentielle
Exemples GDBM : implémentation GNU, libre. Berkeley DB (http://www.sleepycat.com) : implémentation très
performante SDBM : la seule implémentation de DBM disponible sous NT.
43
SGBDR - Système de Gestion de Bases de Données Relationnelles Qu'est-ce que c'est ?
Une base de données où les entités modélisées ainsi que leurs associations sont représentées sous forme de tables
Ligne = une instance de l'entité Colonne = un attribut de l'entité
Caractéristiques Modèle sous-jacent : algèbre relationnelle, ensembliste Un langage d'interrogation normalisé : SQL
Ensembliste, non procédural Des mécanismes garantissant la cohérence des données
Contraintes d'intégrité référentielle, transactions, … Exemples
Commerciaux : Oracle, Sybase, SQL Server … Libres : PostgreSQL, MySQL, mSQL, Bureautiques : Access …
44
MySQL 3.23 SGBDR léger et extrêmement répandu
Client/serveur, multi-utilisateurs, multi-thread, SQL Logiciel libre (été 2000), multi plate-forme
Souvent utilisé ou proposé en conjonction avec PHP Exemple : Free (http://www.free.fr)
Rapide et robuste Un modèle de sécurité très riche
Granularité des permissions très fine (utilisateur, machine, table, colonne, …) De très nombreux outils et bibliothèques
API (Perl, C, php, ODBC, Java/JDBC, …) Interfaçable avec Apache, POP3, … Clients graphiques (X11, Win32)
Limitations / lacunes Pas de sous-requêtes, ni de vues
Impossibilité de faire des mises à jour sur plusieurs tables simultanément Pas de transactions (explique en partie la rapidité de MySQL) Pas de procédures stockées
http://www.mysql.com/
45
PostgreSQL 7.0.3
LE challenger de MySQL ? Comble l’essentiel des lacunes de MySQL…
Vues / sous-requêtes, transactions, procédures stockées
Meilleure conformité avec SQL/92 Meilleur comportement en contexte multi-utilisateur
… au prix toutefois de : Performances inférieures dans certains cas Relativement moindre universalité
Interfaçable cependant avec Perl, Python, Java, PHP, Coldfusion, Pike, …
http://www.postgresql/org
46
Serveur d'annuaire LDAP Qu'est-ce que c'est ?
"Lightweight Directory Access Protocol" Version simplifiée du protocole DAP de X.500
Spécification à plusieurs niveaux : structuration (nommage des données, arborescence) protocole d'interrogation en réseau des données Distribution, réplication et sécurité des données Format LDIF (ASCII) : import / export d'informations
Caractéristiques : Adapté au stockage d'un grand nombre d'entrées contenant
chacune une faible quantité d'informations. Optimisation de la lecture par rapport à l'écriture.
Très grande rapidité d’accès en lecture De plus en plus souvent utilisé comme "Lightweight
Database Access Protocol".
47
OpenLDAP 2.0.7 Un (le ?) serveur LDAP v3 libre
Dérivé de UMich LDAP (Université du Michigan), première implémentation libre de LDAP
Support de LDAP v3 depuis la version 2 Caractéristiques
Cohérence et sécurité : schémas LDAP, ACLs Supporte réplication et distribution Stockage des données : DBM (par défaut)
Stockage dans un SGBDR (Oracle, …) possible Et, naturellement, support de tous les outils LDAP standard
Browsers / éditeurs LDAP API : Net::LDAP (Perl), JNDI (Java), fonctions ldap_* (PHP),
<CFLDAP> (Coldfusion), <LDAPOUTPUT> (Roxen), ZopeLDAP (Zope) …
http://www.openldap.org/
48
Boite à outils Perl
Petite sélection de modules utiles
49
Le CPAN (http://www.cpan.org)
Le site où sont regroupés tous les développements ayant trait à Perl (versions, portages, modules, …)
De nombreux miroirs existent dans le monde, par exemple :
ftp://ftp.lip6.fr/pub/perl/cpan La liste et la documentation des modules est
consultable en ligne, notamment sur : http://theoryx5.uwinnipeg.ca/CPAN/by-module
50
Bundle::CPAN
Module de la bibliothèque standard Installation automatisée de modules Perl
Gère les téléchargements (FTP) et les dépendances entre modules
Utilisation : Sur la ligne de commande :
perl –MCPAN –e shell A l’invite qui s’affiche, taper :
install HTML::Parser
51
Bundle::CGI Module de la bibliothèque standard Simplification de l’écriture de programmes CGI
Moins utile avec des sytèmes des type « embedded Perl » Inutile avec mod_perl (ASP, Mason, Embperl) qui propose un
mécanisme plus efficace (Apache::Registry) Exemples :
use CGI;$q = new CGI;
print $q->param; # liste des paramètres présents dans le requête d’appel
print $q->param(‘nom’); # la/les valeur(s) du paramètre ‘nom’ print $q->dump; # dump HTML des paramètres de la requête,
et de leur(s) valeur(s) print $q->hidden(‘nom’); # transmission de la valeur actuelle
du paramètre nom sous forme de champ caché
52
HTML::Parser
Analyse syntaxique de documents HTML HTML::Parser inclut également une collection
de sous-modules plus spécialisés : HTML::Entities : encodage/décodage des entités
HTML HTML::HeadParser : analyse de l’en-tête d’un
document HTML::LinkExtor : extraction des liens d’un document HTML::TokeParser : interface d’utilisation simplifiée
53
HTML::TokeParser
Exemple : extraction de liens <A HREF=…>
use HTML::TokeParser;
$p = HTML::TokeParser->new(shift||"index.html");
while (my $token = $p->get_tag("a")) { my $url = $token->[1]{href} || "-"; my $text = $p->get_trimmed_text("/a"); print "$url\t$text\n";}
54
Bundle::LWP (libwwwperl) Collection des modules gérant les requêtes
HTTP, notamment : LWP::Simple : interface simplifiée LWP::UserAgent : simulation d’un navigateur LWP::Robot : variante du précédent spécialisée pour
l’implémentation de robots HTTP::Request : encapsulation de requêtes HTTP HTTP::Response : encapsulation des réponses HTTP HTTP::Status : traitement des codes de retour HTTP
Une introduction intéressante : http://www.w3j.com/6/s3.wong.html
Attention, le module HTML::Parse est obsolète !
55
LWP::Simple
Exemple : récupération d’un document
use LWP::Simple;get (http://www.admi.net);
56
URI
Module de traitement des URI / URL Décomposition d'un URI, conversion relatif <->
absolu, … Exemple : conversion relatif -> absolu
use URI;
$u1 = URI->new("http://www.perl.com");$u2 = URI->new("foo");$u3 = $u2->abs($u1);
57
WWW::Robot
Le module LWP fournit tous les éléments nécessaires pour construire des robots de parcours du Web
WWW::Robot s'appuie sur LWP pour proposer un tel robot personnalisable
La personnalisation se fait au moyen de fonctions utilisateurs, qui sont reliées (« hooks ») au robot
58
Net::*
Famille de modules implémentant des fonctionnalités réseau
Net::FTP : interaction avec un serveur FTP Net::LDAP : interrogation d’un serveur d’annuaire
LDAP Net::SMTP : envoi d’e-mails …
59
DBI / DBD::*
Module d’accès à des bases de données SQL Le fonctionnement est architecturé en deux
couches : DBI (« Interface ») : fonctions de haut niveau,
indépendantes du SGBD DBD (« Driver ») : bibliothèques d’interfaçage avec
un SGBD donné Oracle, Sybase, MySQL, …
60
DBI/DBD::* : exemple Consultation d’une table via SQL
use DBI;$dbh = DBI->connect( "DBI:mysql:database=scott;host=localhost", "scott", "tiger");$sth = $dbh->prepare("SELECT ename FROM emp");$sth->execute;while (($nom) = $sth->fetchrow_array) { print "$nom\n";}$sth->finish;$dbh->disconnect;
61
GD
Module de génération et de manipulation d'images JPEG ou PNG
GIF n'est plus supporté par les nouvelles versions (problème de licence)
Intérêt : génération d'images / graphiques / … à la volée
Modules apparentés : Famille Graph:: PerlMagick : interface avec ImageMagick
(http://www.imagemagick.org)
62
Text::Template Module permettant d'inclure du code Perl dans des fichiers
modèles (« templates ») L’ancêtre des approches « embedded Perl »
Exemple : use Text::Template;
$nom = "Scherer";$email = "scherer@paris.ensmp.fr";$texte = Text::Template->fill_this_in(<<FIN);Cher Monsieur {$nom},
Vous venez de gagner le droit de passer la journée à Fontainebleau
Les membres du CRIFINopen MAIL, "|mail $email";print MAIL $texte;close MAIL;
63
Digest::MD5
Module réalisant l'encryptage d'une chaîne de caractères en une signature MD5
Exemples d'utilisation : Signer un e-mail Signer un fichier Signer une URL
64
Analyse de trafic
Exemple d'Analog
65
Gestion des fichiers de logs Choix du format de log (access_log)
Format COMMON date, heure, IP du client, requête HTTP, code de retour. On peut créer aussi les fichiers referrer_log et agent_log.
Format COMBINED : le plus riche pour les statistiques Format COMMON, combiné avec "referrer" et "user-agent". C'est le format qui permet d'approcher au plus près la notion
de session, absente de HTTP. Administration :
Découpage périodique des logs 1 Mo de log pour 5000 lignes environ (format COMBINED) Découpage et archivage (.gz) automatisable (logrotate, …)
Exploitation des logs Application d'un outil de statistiques : Analog, Webalizer, …
66
Statistiques de consultation Volume global de consultation
"hit" (requête HTTP) : souvent vide de sens Grandeur directement proportionnelle à la complexité des pages
"pages HTML" : déjà plus parlant Attention : L'appel d'un "frameset" représente 3 ou 4 pages…
"visite" : est encore mieux… Mais plus difficile à appréhender (pas de sessions en HTML)
Détail des consultations Pages les plus consultées : optimisation (images), … Points de blocage : voir error_log, …
Référencement du site Référencements statiques (liens "fixes" depuis un autre site) Référencements dynamiques (liens "générés" par un moteur)
Quels moteurs ? Quels termes de recherche ? Navigateurs et systèmes d'exploitation
Permet de cibler le niveau de HTML à utiliser dans le site
67
Analog 4.13 Outil d'analyse de logs extrêmement flexible
De nombreux types de rapport sélectionnables Rapports chronologique : mois, semaine, jour, heure, … Rapports non-chronologiques
Hôtes, organisations et domaines Référencement
Analyse des requêtes des indexeurs Systèmes d'exploitation
De nombreuses options de personnalisation Format(s) du ou des fichier(s) source(s) Choix de la langue du rapport Choix des grandeurs représentées (requêtes, pages,
octets) "utilisé par 25% des webmasters dans le monde"
http://www.analog.cx
68
top related