Introduction au CGI (Common Gateway Interface)
7. Debugger un script CGI
Vous venez de terminer la lecture de ce document, d'écrire un script CGI
et là lorsque vous lancer votre navigateur pour faire un test,
vous voyez apparaître à la place de la sortie attendue de votre programme :
"Error 500 : Internal server error" qui ne vous explique pas grand chose...
Nous voila donc dans le coeur du problème, le programme étant lancé par le
serveur HTTP il n'indique pas pourquoi il y a une erreur. C'est donc à vous de
la trouver.
La première chose à vérifier est que lorsque vous exécuter le programme
manuellement il ne produise pas d'erreur, (au besoin connectez vous telnet sur le
serveur) placez vous dans le répertoire 'cgi-bin' contenant le programme
et exécutez le par './mon_cgi.cgi'. S'il produit une erreur, corrigez la et
refaite un essais.
Une erreur fréquente si votre CGI est un script est que la première ligne
'#!/bin/sh' ou '#!/usr/bin/perl' ne correspond pas à une chemin d'interpréteur
valide.
Si l'erreur ne venait pas de là, vérifiez bien que le programme soit exécutable
par tous dans le cas d'un programme compilé, et lisible et exécutable par tous
dans le cas d'un script. En effet souvent le serveur exécute votre programme sous un nom d'utilisateur
différent du votre (nobody). Dans ce cas, faite un petit 'chmod 555 mon_cgi.cgi' .
Si malgré ces points il se produit toujours une erreur, toujours
en le lançant manuellement, vérifier bien que le 'Content-type: text/html' soit bien suivit
d'une ligne blanche, et qu'il n'y ait rien d'afficher avant. En effet dans le cas contraire
le navigateur ne sait pas interpréter le résultat et produit l'erreur.
Cela arrive souvent lorsque l'on utilise une vérification d'arguments ou
de validité d'ouverture d'un fichier avant d'afficher le 'Content-type', un conseil
le mettre toujours en début de programme, cela permet de voir tous les
message de vérification que l'on insère sans risque d'avoir le 'Internal server error'.
Après ces vérification votre programme devrait afficher un résultat, est-ce
le résultat escompté ? si oui très bien, sinon vous devez reprendre le
source pour chercher l'erreur...
Nota : Il existe en Perl et en C des bibliothèques permettant de vous aider à debugger les
CGI. N'hésitez pas à les utiliser, elles peuvent vous faire gagner un temps précieux...
|