pairNetworks


Forum de Support en français
Le Guide du 'Comment Faire'
Débogage CGI Scripts
Comment puis-je déboguer mes scripts CGI sans avoir accès au fichier error_log?

Le fichier error_log n'est pas accessible par les utilisateurs. De par sa taille et son contenu, il est inutilisable à 99%. Par contre il existe beaucoup d'autres moyens pour déboguer vos scripts CGI. L'ensemble de ces moyens offre plus de puissance et de souplesse que le fichier error_log seul..

La toute première source de problème avec les scripts est l'impossibilité de les executer en tout ou partie. Les messages "Server Error" ou "Permission Denied" en sont les symptômes.

Les causes les plus fréquentes de ce genre de problèmes sont :

Pour utiliser cgiwrap avec votre script, vous devrez installer cgiwrap dans votre répertoire cgi-bin ou dans un sous répertoire de cgi-bin . Ceci est une mesure de sécurité évitant l'exécution d'autres fichiers de votre site qui pourraient être modifiés dynamiquement (par exemple, guestbook.html). Le script doit être marqué comme appartenant à votre account et votre groupe (normalement users). Ceci est généralement l'option par défaut. Pour plus d'information consultez la documentation de cgiwrap. Le CGI cgiwrapd fournit les informations de débogage.

Pour lancer le script à partir du shell, Telnet, allez dans le répertoire contenant le script, et lancez le comme suit :

username% ./scriptname.cgi

Les caracères "./" sont obligatoires pour pouvoir exécuter le script depuis la ligne de commande.

Si le script n'est pas exécutable le message suivant apparait :

./scriptname.cgi: Command not found.

Deux raisons sont possibles : erreur dans le nom du script , erreur dans l'interprétation de la première ligne. Assurez vous que le fichier à été transféré en mode ASCII (voir plus haut) et que les chemins d'accès sont corrects. Pour Perl 4.036 : utilisez #!/usr/bin/perl; pour Perl 5.002 : #!/usr/local/bin/perl ;pour Python 1.2 : #!/usr/local/bin/python; pour Bourne shell, use #!/bin/sh. Pour connaître le chemin d'accès correct vers d'autres programmes ou interpréteurs, utilisez la commande which .

Si vous voyez :

./scriptname.cgi: Permission denied.

Ceci est du à un niveau de permission incorrecte. Corrigez en tapant chmod 755 scriptname.cgi, et relancez..

Toute erreur d'interprétation provoque des messages comme :

syntax error at ./scriptname.cgi line 3, near "while 1"
Execution of ./scriptname.cgi aborted due to compilation errors.
username%

Ces messages indiquent où trouver l'erreur de programmation.

Dans les cas de programmes C compilés, le système peut renvoyer des messages Segmentation fault, Memory fault, Bus error, core dumped, etc. Autorisez d'abord la prise de core dumps (commande unlimit coredumpsize ou en éditant votre .cshrc). Recompilez votre programme avec les options de débogage ( -g avec suffix), et recherchez l'erreur avec un débogueur (gdb). Pour plus d'information sur gdb, consultez son tutorial.

Reste la situation où votre programme s'exécute normalement, mais pas dans l'environnement Web. Ceci est généralement dû au fait que des variables 'CGI query' sont inaccessibles, ou encore d'autres variables telle que l'adresse IP du client. Dans ce cas il faut simuler l'environnement CGI à partir de la ligne de commande.

Vous pouvez consulter une liste des variables d'environnement utilisables par un script CGI à http://www.pair.com/cgi-bin/test.cgi. Il est fréquent d'utiliser des variables comme REQUEST_METHOD, QUERY_STRING, et bien d'autres, dans un script CGI. Ces variables seront crées temporairement pour utilisation par un script lancé en ligne de commande grâce à la commande setenv (pour csh shell; voir la documentation pour les autres shells).

Par exemple:

setenv REQUEST_METHOD GET
setenv QUERY_STRING keyword=llama

Note : Pour passer des paramêtres multiples dans query string), il est nécessaire d'empécher l'interprétation des & en les précédant d'un caractère '\' :

setenv QUERY_STRING keyword=llama\&type=hairy

...ou:

setenv QUERY_STRING 'keyword=llama&type=hairy'

Pour lister les variables en cours, tapez env. Pour éliminer ces variables, tapez unsetenv.

Certains scripts doivent s'exécuter avec les même privilèges qu'en ligne de commande et ne fonctionnent pas dans l'environnement Web. Les scripts lancés par le Web s'exécutent sous nobody, group www. Pour exécuter un script sous le nom de votre compte et groupe, utilisez cgiwrap.

Enfin dernière posibilité - votre script peut boucler ou demander des ressources système importantes dépassant les valeurs autorisées, voir Limites de Ressources pour CGI.


[ Forum de Support en français ]
[ Les Guides du 'Comment Faire' ]
[ Overview ]

Last update: Aug 2, 1996
Copyright © 1997 pair Networks

Traduit en français le 08 mars 1997 par SLM2 Net Services

Contact :
qna@slm2.com