Networks
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 :
- Transfert par FTP vers le serveur du texte du script (généralement enPerl) en mode binaire à partir d'un PC ou d'un Macintosh. Les caractères de saut de ligne sont différents sur les systèmes Unix, et vous devez effectuer le transfert sur le serveur par FTP en mode ASCII ou mode texte. Sans cela, la première ligne de votre script ne sera pas bien interprétée par le système et toute tentative d'exécution provoquera l'envoi d'un message "File not Found" ou "Server Error".
- Fichier non autorisé pour exécution. Pour autoriser un fichier à être executer, utilisez la commande chmod 755 filename , par Telnet ou quote site chmod 755 filename par FTP.
- URL du script invalide. L'URL doit être du type http://www.domain.com/cgi-bin/filename ou http://www.pair.com/username/cgi-bin/filename.
- Erreur de syntaxe ou d'interprétation dans le script. Ceci provoque des erreurs de compilation de l'interpréteur avant même l'exécution. Pour détecter ce genre de problème, utiliser
- cgiwrap, ou exécutez votre script à partir du shell (voir plus loin).
- Run-time errors. Si l'exécution du script ne se termine pas correctement, le script pourra avoir généré des messages interférant avec les entêtes HTTP attendues par le serveur Web. Une fois encore, vérifiez que les autorisations d'exécution sont correctes. Utilisez cgiwrap pour détecter ces erreurs. Pour détecter des erreurs de programmation lancez le script à partir du shell (voir plus loin).
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=llamaNote : 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.
| 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 |