Sauf mention contraire dans les contenus, l'ensemble de ce site relève de la législation française et internationale sur le droit d'auteur et la propriété intellectuelle.
Foire Aux Questions - Quelles solutions aux erreurs courantes ?
Auteur : L.Jégou
Il s'agit d'une erreur d'accès en écriture dans le répertoire prévu pour les images temporaires générées par MapServer. Il faut donc vérifier :
- que le répertoire prévu pour ces fichiers temporaires est bien accessible en écriture par l'user correspondant au logiciel serveur (généralement "daemon" ou "www-user")
- que le chemin indiqué dans le bloc WEB du mapfile par le paramètre IMAGEPATH est correct.
- que ce chemin correspond bien à un répertoire réel de la machine ou à un alias du logiciel serveur.
Auteur : L.Jégou
Le plus souvent, cette erreur provient d'une mauvaise orthographe de l'applicaiton CGI appellée.
En effet, on peut encore trouver des tutoriels et des exemples qui appellent le CGI de MapServer "mapserv40", alors qu'il est compilé par défaut aujourd'hui sous le nom "mapserv" ou "mapserv.exe", selon le système.
Sous unix une possibilité consiste à créer des liens symboliques sous divers noms vers l'exécutable réel (commande "ln -s nom-du-fichier-reel nom-du-lien-symbolique").
Auteur : L.Jégou
Il s'agit d'une erreur de syntaxe dans le MapFile, il faut vérifier la bonne orthographe à l'endroit indiqué après le "near :" du message, et qu'il ne manque rien juste avant. Certains paramètres sont en effet obligatoires dans un MapFile, et doivent être renseignés (posséder une valeur).
Auteur : L.Jégou
Le plus souvent, cette erreur a deux origines :
- le paramètre TOLERANCE est trop rigoureux.
- il manque le paramètre TEMPLATE dans le bloc LAYER ou le(s) bloc(s) CLASS.
Auteur : L.Jégou
Problèmes d'EXTENT
Dans la grande majorité des cas, cette erreur est causée par un EXTENT invalide.
Il faut donc vérifier :
- l'ordre des valeurs de l'EXTENT : [XMIN] [YMIN] [XMAX] [YMAX]
- l'unité utilisée dans ces valeurs, qui doit correspondre à celle de la projection.
- le calage de l'EXTENT avec la position des données dans les couches, notamment la projection utilisée.
Problèmes d'activation des couches
Une autre source classique est l'étourderie qui fait laisser des paramètres STATUS OFF dans les blocs LAYER, ce qui les désactive.
Problèmes d'expression de filtrage
Si vous utiliser un filtre, une sélection des objets dans la ou les couches, il se peut que ce filtre ne donne pas de résultat. Les expressions MapServer sont assez complexes à mettre en oeuvre, cf. le howto qui leur est consacré.
Auteur : L.Jégou
- Error reported was 'could not connect to server: Connection refused
Le serveur refuse la connexion, ou ne répond pas. Apache n'est peut-être pas lancé (ou a planté) sur le serveur. Sa configuration d'autorisation d'accès est peut-être trop restrictive, ou un firewall empèche la connexion.
Il peut s'agir aussi d'un problème de connexion à un serveur PostGIS, si le MapFile en contient une. Il faut alors vérifier si le serveur PostgreSQL est bien lancé et accessible.
Auteur : L.Jégou
- 500 Internal Server Error
Le serveur Apache a connu un plantage. C'est généralement du à un problème d'installation de MapServer, et des bibliothèques de fonctions qu'il utilise. On peut essayer d'obtenir plus d'informations en lançant l'utilitaire shp2img ou la version CGI de MapServer en mode console, avec la commande "cgi-bin/mapserv -v". Si c'est bien un problème de bibliothèques (libraries), vous obtiendrez un message du type suivant :
mapserv: error while loading shared libraries: libXXX.so: cannot load shared object file: No such file or directory.
Il peut aussi s'agir d'un problème d'installation de PHP et de MapScript, on peut essayer d'en savoir plus en regardant la page d'informations de configuration de PHP, que l'on obtient par la fonction PHP phpinfo().
Auteur : L.Jégou
- msLoadMap(): Unable to access file.
Cette erreur provient du fait que le mapfile n'est pas lisible par MapServer, ce qui peut indiquer les problèmes suivants :
- le chemin vers le fichier est incorrect
- les droits d'accès au fichier ou à son répertoire ne sont pas adaptés (apache est généralement reconnu sous le nom d'user unix "daemon" ou "www-user").
- problème de racine différente : le document root d'Apache peut être mal placé par rapport à l'url appelant le mapfile.
Auteur : L.Jégou
Pour déboguer un MapFile, traquer et corriger les erreurs, plusieurs solutions sont envisageables :
- l'activation du débogage d'Apache (ou autre logiciel serveur).
- l'activation du débogage de MapServer.
Le débogage d'Apache consiste en un tracing des opérations, c'est à dire à la rédaction automatique d'une liste (plus ou moins détaillée) des opérations et des problèmes rencontrés par le logiciel serveur au cours de son exécution.
Cette fonction est généralement activée par défaut sur Apache 1 et 2, mais avec les paramètres par défaut le niveau de détail du tracing peut être trop faible. Dans le fichier de configuration httpd.conf, le tracing des erreurs est défini par les paramètres suivants :
- ErrorLog logs/error_log : chemin vers le fichier contenant le tracing, relatif au répertoire de base d'Apache (/usr/local/apache ou apache2 par défaut).
- LogLevel warn : "warn" est le niveau de détail par défaut, moyen. Vous avez le choix entre debug, info, notice, warn, error, crit, alert, emerg, du plus détaillé vers le moins. Si le niveau "warn" ne permet pas de faire ressortir la cause du problème, vous pouver progressivement passer à un niveau plus bavard, en modifiant la valeur du paramètre et en redémarrant Apache (restart).
Le débogage de MapServer (expliqué ici sur le wiki officiel) permet de réaliser la même opération de tracing, mais concernant l'activité de MapServer. Son activation consiste en l'ajout du paramètre "DEBUG ON" dans le bloc pouvant être fautif. Le tracing se fera alors dans la sortie standard (std_out) du serveur, dans le log_error d'Apache, ou dans le fichier pointé par la variable d'environnement système "MS_ERRORFILE". On peut mettre en place cette variable directement dans le fichier de configuration d'Apache, avec la syntaxe suivante :
SetEnv MS_ERRORFILE "chemin"
Autre possibilité, plus simple, ajouter un paramètre LOG [fichier] dans le bloc WEB du mapfile.
Il est aussi possible d'utiliser des tracing d'erreur avec GDAL/OGR et PROJ, en activant respectivement les variables d'environnement "CPL_DEBUG" et "PROJ_DEBUG".