Pricident Suivant Table des matihres

3. Premier programme

Pour écrire un script CGI, nous pouvons utiliser n'importe quel langage de programmation. Nous devons simplement pouvoir lire sur l'entrée standard, écrire sur la sortie standard et accéder aux variables d'environnement.

Nous allons écrire notre premier programme que nous appelerons date.cgi. Nous devons penser aux permissions de ce fichier. Le programme doit être exécutable par tous, et lisible par tous dans le cas de script shell, perl ... En effet, n'oublions pas que c'est le serveur HTTP qui va exécuter notre programme. Or, le serveur tourne dans la majeure partie des cas sous l'utilisateur nobody, et donc il n'a pas de droits particuliers (retenons bien que le serveur ne s'exécute pas sous l'utilisateur qui a écrit le script).

Nous installerons notre progamme dans le répertoire /usr/local/etc/httpd/cgi-bin, qui est le répertoire par défaut des scripts CGI (encore faut-il que l'administrateur du système nous en laisse le droit). En effet, n'importe qui n'a pas le droit de faire des scripts CGI. L'administrateur peut limiter la possibilité de mettre des scripts CGI que dans un seul répertoire. Il contrôlera ainsi beaucoup plus facilement ces scripts. Car, il faut le savoir, les scripts CGI sont une bonne source de trous de sécurité.

Ainsi, le serveur sait que tous les fichiers se trouvant dans ce répertoire devront être exécutés et non pas envoyés directement au navigateur, et ce seront les seuls dans ce cas. C'est le programme qui devra envoyer les informations au navigateur, par l'intermédiaire de la sortie standard (d'où l'obligation de pouvoir écrire sur la sortie standard). Donc, notre programme doit produire sur sa sortie standard quelque chose de compréhensible par le navigateur. Ainsi, lorsque votre navigateur accédera à l'URL correspondant à ce fichier (par exemple: http://www.april.org/cgi-bin/date.cgi), le serveur exécutera le programme date.cgi qui produira un fichier au format HTML contenant la date courante. Le navigateur affichera alors le résultat.

3.1 Source du programme

Notre premier programme est écrit sous la forme d'un script shell. Voici le source de date.cgi:


#!/bin/sh

tmp=`/bin/date`

cat << EndFile
Content-type: text/html

<HTML><HEAD><TITLE>Script Cgi</TITLE></HEAD>
<BODY>

<CENTER>

<H1>La date courante sur le serveur est</H1>
$tmp

</CENTER>

</BODY>
</HTML>

EndFile

On fait un chmod 555 date.cgi et on copie le fichier dans le répertoire /usr/local/etc/httpd/cgi-bin. Ensuite, on peut utiliser notre navigateur pour voir le résultat. On accède à l'URL http://www.april.org/cgi-bin/date.cgi et on obtient le résultat suivant:

        La date courante sur le serveur est
         Sun Mar 30 11:48:54 GMT+0100 1997 

Au niveau du source, on affecte à la variable tmp le résultat de la commande /bin/date ($tmp permet ensuite d'avoir accès au contenu de la variable tmp). Ensuite, il faut juste savoir que la commande cat << EndFile permet d'afficher sur la sortie standard tout ce qui suit jusqu'à ce que l'on rencontre une ligne formée uniquement par EndFile (la chaîne suivant immédiatement <<). En fait, tout ce qui se trouve entre << EndFile et EndFile est utilisé comme entrée standard de la commande cat (la chaine EndFile est choisie arbitrairement).

Ce type de script shell où les données sont directement incluses dans le script s'appellent des documents in-line ou des here documents.

Ce qui est important de noter, c'est la première ligne écrite sur la sortie standard (Content-type: text/html), c'est à ce niveau que l'on spécifie le type de données que l'on envoie au navigateur. Cette ligne fait en fait partie du header HTTP. Ce header est indispensable pour que le navigateur puisse interpréter correctement les données reçues (les autres parties du header seront ajoutées par le serveur HTTP). Le type "text/html" est le type MIME standard pour un document HTML. Si notre programme devait générer une image au format Gif (par exemple pour implémenter un compteur graphique), nous aurions utilisé le type "image/gif". Le header doit obligatoirement être terminé par une ligne vide (comme le header de tous les protocoles). Cette ligne sépare l'en-tête de la réponse (c'est à dire les informations au sujet de la réponse) du contenu de la réponse.

Ce qu'il faut retenir à ce niveau, c'est qu'un script CGI doit produire sur sa sortie standard quelque chose de compréhensible par le navigateur, donc, dans la majorité des cas, une sortie au format HTML. La seule obligation est la présence, sur la première ligne, du header Content-type. Les autres parties du header seront ajoutées par le serveur HTTP. C'est pourquoi ce type de script est appelé Parsed Header Script. Il existe un autre type de script CGI, appelé Non Parsed Header Script. Pour ce type de script, le serveur ne rajoute rien, et c'est donc le script lui_même qui a la charge de fournir un header complet, conforme au protocole HTTP.

Voilà, nous avons écris notre premier script CGI. On y accède directement par le navigateur.

Faites le test: http://www.april.org/cgi-bin/date.cgi.


Pricident Suivant Table des matihres