Les scripts CGI et Bash

Les scripts CGI permettent d'introduire l'interactivité dans les sites web. A l'aide de Bash, l'interpéteur de commandes Unix, on peut réaliser des scripts simples.

21. Page statique / interactivité


Les notions dont nous allons parler sont extraites de nos lectures.

Livres consultés


Pratique de MySQL et PHP, par philippe Rigaux, édition O'REilly.
Chapitre 2 : programmation web.

Extraits :
«Jusqu'à présent les pages HTML que nous avons créées sont totalement statiques. Leur contenu est fixé à l'avance et l'utilisateur ne dispose d'aucun moyen d'action pour sélectionner les informations qui l'intéressent. Un autre inconvénient, du point de vue du webmestre cette fois, est que la maintenance du site implique la manipulation d'un ensemble de pages HTML qui peut rapidement devenir très volumineux. (...)
Le Common Gateway Interface (CGI) constitue la technique traditionnelle pour pallier les deux inconvénients ci-dessus. Le principe consiste à produire les documents HTML par un programme qui est associé au serveur web. Ce programme reçoit en outre des paramètres saisis par l'utilisateur. (...)
Les formulaires constituent un moyen privilégié d'interaction...»


22. Le contexte de l'expérimentation.


Alors qu'il est facile d'expérimenter les scripts en ligne, à partir d'un hébergement gratuit (de type Free par exemple), il est beaucoup plus incertain de trouver un hébergeur qui vous installera un Forth sur sa machine.
Les exemples qui suivent s'exécutent en local sur une machine Linux sur laquelle le serveur Apache a été installé et est en cours d'exécution. Comme je ne dispose que d'une seule machine active à la fois, le réseau est simulé : le navigateur web permet d'afficher le site web qui s'exécute à l'adresse «localhost».
Si vous ne remplissez pas ces conditions, il faut (dans l'ordre) :

- rechercher la bonne version d'Apache pour votre machine (Windows ou Linux - pour Mac je ne connais pas)

- l'installer (cela dépend de votre système, prendre par exemple EasyPhP pour Windows).

- le démarrer : avec Linux, lancer le script «apachectl» en étant root
apachectl start
- savoir à quel répertoire correspond la racine du site (ce qui est désigné par «localhost») :
sur ma machine :
/var/www/html
La simple énumération ci-dessus pourrait laisser croire que c'est facile... et cela l'est sans-doute quand on a terminé son cycle d'apprentissage. Quand on est au début de celui-ci, c'est souvent incompréhensible, accompagné de nombreux messages d'erreurs en anglais.
Ce qui suit résume un parcours difficile qui pourra vous aider à vous retrouver.
Pour me simplifier la vie, j'ai donné à l'utilisateur lamba (moi...) tous les droits sur le répertoire /var/www de ma machine... Ceci est acceptable quand on est en local, mais serait bien sûr très différent en ligne.

23. Un premier formulaire.


Dans tout ce qui suit,
Projet :
Le formulaire devra contenir un bouton à cliquer ;
si l'on clique sur le bouton «valider» un script-cgi s'exécutera ;
si l'on clique sur le bouton annuler, rien ne se passera.

Code de la page HTML appelée formul1.html:


<html><head><tittle></title></head><body>
<h1>Cliquez sur un bouton</h1>
<FORM ACTION="http://localhost/cgi-bin/coucou.cgi" METHOD=POST ENCTYPE="multipart/form-data">
<br>
<h3>Choix : </h3>
<input type = SUBMIT value='valider'>
<input type = RESET value='annuler'>
</FORM>
</body></html>

Remarques :


La partie active du formulaire commence par <FORM et se termine par </FORM>
ACTION="http://localhost/cgi-bin/coucou.cgi" permet de définir le nom et la localisation du script CGI. Remarquer la localisation relative à la racine du site : «localhost» liée au fait que l'expérimentation se fait en local, à partir d'un serveur Apache s'exécutant sur la même machine. Dans le cas d'un site s'exécutant à l'extérieur, on pourrait avoir «monsite.com» ou tout autre dénomination.
METHOD=POST signifie que les actions effectuées par l'utilisateur vont être transmises vers le serveur qui distribue les pages web.
«<input type = SUBMIT» permet de définir le premier bouton
«value='valider'>» texte du premier bouton
<input type = RESET value='annuler'> second bouton

Où placer cette page ?


Pour que cela marche «pour de vrai», il faut la placer à la racine du site, soit, sur ma machine, dans le dossier :
/var/www/html

Comment visualiser cette page ?


Surtout, ne pas cliquer sur l'icône du fichier... cela ne lancerait pas la simulation de site web.
Il faut :
lancer un navigateur webmestre
introduire l'adresse suivante http://localhost/formul1.html
si le navigateur ne vous affiche pas la page, c'est qu'il y a des problèmes d'installation ou de configuration d'Apache (on y reviendra plus loin)
si vous voyez le formulaire, passez à l'étape suivante.

24. Un premier script


Avant de tenter un script en Forth, il faut déjà s'assurer qu'un script «banal» s'exécute réellement.
Sous Linux, le plus simple est d'essayer un script bash (sous Windows, ce serait un fichier «.bat»).

Script pour Linux : coucou.cgi


#!/bin/sh
echo "Content-Type: text/plain"
echo
echo "Vous avez cliqué sur le bouton Valider"

Script pour Windows : coucou.bat

@echo off
echo "Content-Type: text/plain"
echo
echo "Vous avez cliqué sur le bouton Valider"

Actions complémentaires :


Recopier le script dans le dossier destiné à recevoir les scripts CGI du site : sur ma amchine, c'est /var/www/cgi-bin
Sous Linux, rendre le script exécutable en introduisant (dans le répertoire /var/www/cgi-bin) la commande suivante :
chmod +x coucou.cgi
Si vous êtes sous Windows, modifier le code de la page formul1.html :
<FORM ACTION="http://localhost/cgi-bin/coucou.bat" METHOD=POST ENCTYPE="multipart/form-data">

25. Premier résultat


Pour visualiser le résultat, et toucher ainsi notre récompense, il faut :
- lancer un navigateur
- introduire l'adresse suivante http://localhost/formul1.html
si le navigateur affiche la page, tester ce qui se passe quand on clique sur l'un ou l'autre bouton. Normalement, on obtient «Vous avez cliqué sur le bouton Valider» si l'on clique sur «Valider» et rien si l'on clique sur annuler.

Normalement, on peut conclure que nous avons réussi à introduire un peut d'interactivité.
Que tout ait bien marché ou raté, il faudra se pencher sur la configuration d'Apache.




Haut de page