idf.net  
   


Internet, technique ?!

Vous avez fait votre site, et vous l'avez fait avec des pages html. Comment faire pour aller plus loin et afficher des pages dynamiques, qui vont chercher des donnees dans des fichiers, qui vous permettent de faire des forums, des listes de diffusion, des livres d'or, etc...

Il existe de nombreux outils pour faire toutes ces choses.

Frontpage 2000, ASP, PHP (associe en particulier a mySQL), Cold Fusion, etc... Mais chacun de ces produits doit au prealable etre installe sur le serveur qui heberge votre site (ce qui n'est pas evident), et il n'est pas certain que ce qui convient pour un projet convienne pour un autre.

En fait, la seule methode qui puisse s'adapter a tous les cas, c'est le CGI.

Mais avant de voir le cgi d'un peu plus pres, quelques mots des autres methodes :

Frontpage 2000, ASP, SSI, Cold Fusion reposent sur le principe d'un ajout de fonctionnalites a l'html. Pour le concepteur, cela veut simplement dire qu'il dispose de balises html supplementaires qui seront interpretees par le serveur Web (cote serveur) pour remplacer certaines choses dans la page html en fonction de la description dans ces balises speciales.

SSI (Server Side Includes) est tres souvent installe sur les serveurs. Il permet d'acceder a toutes les variables d'environnement. La plupart du temps, les fichiers qui contiennent du SSI doivent etre nommes en .shtml.

ASP (Active Server Page) est un produit Microsoft qui permet d'acceder a des bases de donnees uniquement par des descriptions sous forme de balises dans la page html. L'avantage majeur est que tout est dans la page html. Et cela reste assez discret contrairement au javascript, car la traduction des balises ASP est faite cote serveur avant l'envoi au navigateur client. ASP permet d'utiliser toutes les bases de donnees OBDC. ASP a de plus des capacites de traitement et de programmation, mais ca devient vite lourd a manipuler. C'est une bonne solution pour ceux qui ne jurent que par Microsoft et qui ont un hebergeur qui accepte l'ASP.

Domino (Lotus - IBM) est une solution similaire, avec des avantages et des inconvenients similaires : il faut que votre hebergeur ait Lotus Domino.

Cold Fusion : Toujours le meme principe : les pages contiennent des balises CF qui sont interpretees par le moteur Cold Fusion sur le serveur pour generer la page au vol. Il faut egalement que l'hebergeur ait installe Cold Fusion.

Front Page 2000 de Microsoft est un produit un peu a part : il a pour objectif de rendre la creation d'un site web plus facile pour ceux qui n'y connaissent pas grand chose. On se retrouve dans un environnement de type "Office" avec des outils qui permettent de faire reellement un vrai site avec bases de donnees (pas de programmation un peu rusee, ca n'est pas fait pour ca). L'inconvenient majeur est qu'une fois Front Page 2000, vous n'arriverez probablement pas a mettre votre site dans un autre environnement, ou alors au prix de gros efforts. L'utilisation de Front Page 2000 suppose que votre hebergeur vous fournisse un environnement front page 2000 cote serveur...

PHP est a mi-chemin entre un langage de programmation et un langage de description. Un programme php s'ecrit dans un fichier .php qui sera interprete par le moteur PHP installe par votre hebergeur cote serveur.

Certains ne jurent que par php, en particulier pour l'utilisation des bases mySQL, mais j'avoue qu'apres trois semaines d'usage intensif, je n'arrive pas a aimer php, et je n'ai pas l'impression de gagner de temps par rapport au developpement en perl avec les bibliotheques de traitement de bases de donnees appropriees (DBI). De plus, perl est beaucoup plus pratique pour la manipulation des donnees. Mais il s'agit d'une veritable alternative efficace pour creer une gestion de base de donnees SQL complexe.

Python commence a bien s'implanter aux US. C'est un langage de programmation assez similaire au perl. Mais le perl est gratuit et installe sur quasiment tous les serveurs, alors que Python est nettement plus rare. Python utilise aussi le CGI.

Tout le monde a entendu parler de CGI, associe le plus souvent a Perl. Mais beaucoup imaginent cela comme requerant une hyper competence et des capacites techniques importantes. Comme toujours c'est vrai et c'est faux. De nombreux debutants n'ayant jamais fait de CGI se sont progressivement lances, et dites-vous bien que les hyper-specialistes d'aujourd'hui ont ete debutants.

Cet article a pour objectif de vous expliquer le concept des cgi. Ce que cet article ne fera pas, c'est vous transformer en un specialiste de perl, car, dans ce domaine comme dans tous les domaines, c'est votre travail d'apprentissage et vos efforts qui vous conduiront a la connaissance : si vous voulez apprendre, il va vous falloir retrousser les manches ;-)

PREMIERE PARTIE : LE VOCABULAIRE

CGI = Common Gateway Interface.

C'est un interface qui permet aux serveurs Web de pouvoir declencher des programmes sur demande des utilisateurs. L'exemple le plus courant, c'est lorsque vous faites un formulaire en HTML (balise <form>). En cliquant sur le bouton envoi, vous declenchez l'appel a un programme par l'interface CGI. On dit plus simplement de facon familiere qu'on a "lance un CGI", ce qui est un petit abus de langage.

Le CGI c'est la clef des structures client-serveur.

Certains hebergeurs n'acceptent pas que vous utilisiez des CGI. C'est le cas en particulier des hebergements "gratuits", car les CGI consomment de la ressource systeme et peuvent (lorsque les programmes cgi sont mal ecrits) mettre a mal les performances du serveur. Si vous souhaitez pouvoir ecrire des programmes qui traitent directement vos formulaires et que votre hebergeur n'accepte pas les CGI, une seule solution : changez d'hebergeur.

perl = langage de programmation

Un programme lance par CGI peut etre ecrit dans differents langages, tels que le C, le TCL ou le perl.

Le perl (Practical Extraction and Report Langage) a ete cree a l'origine par Larry Wall pour manipuler du texte dans un environnement Unix. Aujourd'hui le perl est tres largement utilise dans tous les environnements.

Le perl a trois gros avantages : il est gratuit, multi environnement (ms-dos, vms, os/2, Plan 9, Mac OS, tous les unix et tous les windows) et il n'est pas besoin de connaitre tout perl pour commencer a l'utiliser. Tous les hebergeurs acceptant le CGI ont perl.

UNIX : systeme d'exploitation

Il en existe de nombreuses variantes, dont le fameux Linux. La majorite des hebergeurs fournissent des hebergements sous environnement unix. Cet article est ecrit dans un cadre unix, mais tout ce que nous faisons est egalement realisable sous windows.

Il faut toutefois souligner le fait que les noms de variables, de fichier etc... sous Unix DISTINGUENT LES MINUSCULES ET MAJUSCULES. Ainsi, le fichier Toto.cgi et toto.cgi SONT DEUX NOMS DIFFERENTS. Il en est de meme dans les noms de zones <INPUT> des vos formulaires html. Ne l'oubliez pas, une tres grosse partie des erreurs de debutants viennent de cette confusion.

FTP : File Transfert Protocol

Vous devez connaitre si vous avez deja installe un site internet. ATTENTION : Les programmes ecrits en perl sur votre machine doivent etre telecharges sur votre site en mode ASCII (caracteres) et SURTOUT PAS binaire. Vous ne vous en etes peut-etre pas apercus lorsque vous avez charge votre site, mais il existe deux modes : ascii et binaire. Cherchez dans la configuration de votre ftp.

Il y a egalement dans votre programme FTP la possibilite de changer les droits de vos fichiers sur votre hebergement (voir explication des droits a chmod). Cette fonction est imperative et DOIT exister sur votre FTP (je n'ai pour l'instant pas encore rencontre un FTP qui n'avait pas cette fonction). Suivant le cas, elle s'appelle "proprietes", "permissions", "autorisations",...

chmod : vient de la commande unix "Change Mode"

Un fichier est defini avec des droits d'acces. Il y a trois categories de personnes et trois types de droits.

Les categories de personnes sont : proprietaire (owner), Groupe, tous (everybody).

Les categories de droits sont : lire, ecrire, executer.

Les droits d'un fichier sont de la forme xxx ou chaque x est un chiffre entre 1 et 7. Le premier chiffre donne les droits du proprietaire, le deuxieme celui du groupe, le troisieme celui de tout le monde.

Chaque chiffre est une somme de trois chiffres : 4 pour le droit de lecture, 2 pour le droit d'ecriture et 1 pour le droit d'execution.


                   lire          ecrire       executer
Proprietaire        (4)            (2)            (1)
Groupe              (4)            (2)            (1)
Tout le monde       (4)            (2)            (1)

      

Par exemple un chmod de 666 veut dire que le fichier est lisible et modifiable par tout le monde (mais pas executable).

Un chmod de 755 est un fichier qui peut etre execute par tout le monde (c'est un programme), bien sur, lisible par tout le monde, mais modifiable uniquement par le proprietaire.

La plupart du temps vos fichiers de donnees devront etre en 666 et vos programmes CGI-perl devront etre en 755

DEUXIEME PARTIE : VOTRE ENVIRONNEMENT

Il est bien evident que votre environnement n'est pas le meme suivant votre hebergement. Dit autrement, cela veut dire que les differents fournisseurs d'hebergement n'ont pas tous configure leurs serveurs de la meme facon (ce qui est normal).

Il va quand meme falloir connaître votre environnement pour pouvoir faire fonctionner vos cgi, car pour communiquer, votre programme a besoin de connaître cet environnement...

En fait, pour demarrer, et la plupart des utilisateurs demarrent en recuperant un cgi gratuit (voir plus loin dans l'article) pour l'installer sur leur site, il y a deux choses a connaitre : "ou est perl" et "quel est le chemin d'acces de mon site ?"

Ou se trouve perl ?

C'est la premiere question, la plus importante pour demarrer. Car la premiere chose que va faire votre CGI c'est de dire qu'il est en perl et d'etablir la communication avec l'interpreteur perl.

C'est le role de la toute premiere ligne qui est de la forme :

#!/usr/bin/perl

Sur 90% des serveurs en UNIX, cela devrait marcher avec cette formule.

Si cela ne fonctionne pas, vous devez poser la question a votre hebergeur.

quel est le chemin de mon repertoire ?

Cela depend completement de la facon dont votre hebergeur a configure son systeme et cela peut etre tres variable.

La methode la plus simple pour le savoir est de poser la question a votre hebergeur. Mais si vous avez du mal a obtenir la reponse, vous pouvez installer le petit programme perl varsys.cgi. Si vous n'avez pas besoin d'utiliser de cgi-perl aujourd'hui, sautez cette partie, vous aurez peut-etre l'occasion d'y revenir plus tard.

<debut d'aparte>

Ce programme est prevu pour tourner sous Unix uniquement, car l'instruction "ls" utilisee est une commande unix.

1. Saisissez le texte du programme perl suivant :


#!/usr/bin/perl
print "Content-type: text/html\n\n";
 while (($key,$val) = each %ENV)
 {
 print "$key = $val 
\n" } $ls = `ls *.*`; print $ls;

Cela peut etre fait par un copie/coller dans wordpad ou tout autre traitement de texte.

2. Enregistrez le en ascii (format .txt)

3. Copiez le fichier a l'aide de votre FTP

4. faites un chmod 755 sur votre fichier avec votre logiciel FTP (voir chmod dans la premiere partie)

5. lancez votre cgi

Normalement, vous devez voir la liste de vos variables d'environnement, et en particulier le repertoire avec le chemin complet vers la ou se trouve votre programme varsys.

Cela est sans doute quelque chose qui ressemble a /home/toto/public_html/varsys.cgi

<fin d'aparte>

Il existe de nombreux cgi gratuits qui ont ete realise par des auteurs qui les mettent a disposition. Vous en trouverez par exemple a http://www.scripts-fr.com/ anime par "Rotule" qui a cree les cours CGI au CWF.

Ces scripts doivent etre adaptes pour fonctionner sur votre site. En regle generale, les deux seuls elements dont vous aurez besoin sont "ou est perl" et "quel est le chemin de mon repertoire".

Certains scripts auront parfois besoin de savoir comment acceder a des fonctionnalites du serveur. Ce sera le cas par exemple de tous les traitements de formulaire qui doivent envoyer un email et qui, pour la plupart, utilisent le programme SENDMAIL. Il faudra poser la question a votre hebergeur.

En tous cas, avec ces notions de base, vous voila fins prets a tenter le coup et installer votre premier script CGI en perl...

TROISIEME PARTIE : ET LES BASES DE DONNEES ?

Une "base de donnees" est une collection de donnees que l'on decrit generalement comme organisee en rangees et en colonnes ou encore en enregistrements (rangee) et en champs (colonne).

Le mode le plus rustique de rangement des donnees est une ligne par enregistrement (rangee), et dans la ligne, les champs separes par un caractere special, le separateur. On appelle cette structure un "fichier plat". Il ne necessite aucun logiciel d'exploitation supplementaire : c'est vraiment le plus rustique.

L'habitude fait que l'on utilise plutot le caractere "barre verticale" | pour separateur, parce qu'on ne l'utilise jamais dans les champs et qu'il n'y a pas de risque de confusion a l'inverse du "point-virgule" ; utilise a l'origine dans les fichiers plats.

Un fichier plat convient tout a fait bien pour les fichiers jusqu'a 1000 enregistrements. Au dela, cela peut devenir incertain, et vous pouvez vous attendre a des difficultes des que vous atteindrez des 5000 a 10000 enregistrement (en perl, un fichier plat est entierement charge en memoire pour etre traite).

Si vous avez de gros fichiers, il va donc vous falloir utiliser des veritables bases de donnees.

La plus utilisee est probablement mySQL, parce qu'elle est gratuite et que les hebergeurs n'hesitent pas trop a l'installer. J'ecris bien "pas trop", car il n'y a qu'un seul gestionnaire mySQL sur tout le serveur et qu'il faut avoir une gestion des autorisations d'acces aux differentes base mySQL pour que tout le monde n'accede pas a tout...

MySQL est une base de donnees de type SQL (System Query Language), langage de manipulation de bases de donnees invente a l'origine par IBM et desormais standard de fait pour toutes les grosses bases de donnees professionnelles.

Cela veut dire en gros qu'a part les demandes d'ouverture (de "connexion") a la base, votre programme perl pour les bases mySQL aura tres peu de modifications a subir pour tourner sous Oracle ou Informix.

Des tests realises avec mySQL indiquent qu'on arrive a utiliser des bases jusqu'a pres d'un million d'enregistrements.

Sans aller jusque la, on peut dire avec quelque serenite que jusqu'a 100000 enregistrements, vous n'aurez aucun probleme avec mySQL.

Dernier point : votre base mySQL n'est pas dans votre espace web sur le serveur, mais dans un repertoire inaccessible aux heberges. Vous devrez donc ecrire un programme de sauvegarde si vous voulez le faire vous meme.

Note technique : il ne faut pas confondre "base" mySQL et "tables" Vous pouvez avoir de tres nombreuses tables dans une base, par exemple la table des bouteilles de vins de la cave, celle de vos cd, la liste des membres de votre association etc... tout ca dans la meme base. Les droits d'acces sont gerees pour les bases et il est rare qu'un hebergeur gere les autorisations d'acces par table. Ce sera a vous de le faire dans votre script. Quand on vous dit que vous avez cinq bases mySQL, il s'agit de bases et pas de tables...


l'auteur de cet article

Michel LO, 48 ans, Ingenieur en Genie Chimique, Docteur en Informatique.

Michel est le redacteur en chef de "Une Semaine sur le Net" et dirige BeLT, une entreprise specialisee dans le marketing operationnel. Il maitrise en outre les outils internet dans le cadre de leur utilisation marketing. Il est membre de l'ISOC et de la FEEF.