Installation de PHP MapScript

Author:Jeff McKenna
Contact:jmckenna at gatewaygeomatics.com
Last Updated:2016-06-15

Introduction

Le module PHP/MapScript est un module PHP chargeable dynamiquement qui met à disposition les fonctions et les classes de MapScript Mapserver dans un environnement PHP.

La version originale de MapScript (en Perl) utilise SWIG, mais comme SWIG ne supporte pas le langage PHP, le module doit être maintenu séparément et peut ne pas être parfaitement synchronisé avec la version Perl.

Le module PHP a été développé par DM Solutions Group et est maintenu actuellement par Mapgears.

Ce document assume que vous êtes déjà familier avec certains aspects de votre système d’exploitation:

  • Pour les utilisateurs Unix/Linux, une familiarité avec l’environnement de compilation, particulièrement make.

  • Pour les utilisateurs Windows, quelques compétences en compilation si vous n’avez pas accès à une installation précompilée et que vous avez besoin de compiler votre propre version de Mapserver avec le module PHP/MapScript

Quelle version de PHP est supportée?

PHP MapScript a été initialement été développé pour PHP-3.0.14 mais après MapServer 3.5, le support de PHP3 a été abandonné et lors de la dernière mise à jour de ce document, PHP 4.3.11 ou plus était requis (PHP5 est bien supporté).

Les meilleurs combinaisons entre les versions de MapScript et PHP sont:

  • MapScript 4.10 avec PHP 5.2.1 et plus

  • MapScript 4.10 avec PHP 4.4.6 et plus

Avertissement

PHP 7 support is still in development; please follow along and contribute through the associated ticket.

Comment avoir plus d’informations sur le module PHP/MapScript pour MapServer

  • Pour une liste de toutes les classes, propriétés, et méthodes disponibles dans le module, voir le document de référence php_mapscript.

  • Plus d’informations sur me module PHP/MapScript peut être trouvée sur la page PHP/MapScript page sur le site MapTools.org.

  • Le Wiki MapServer a aussi des notes sur la compilation et l’installation de PHP/MapScript et quelques exemples de codes php.

  • Les questions concernant le module doivent être adressées par la liste de diffusion MapServer.

Obtenir, compiler et installer PHP et le module PHP/MapScript

Télécharger PHP et PHP/MapScript

  • Les sources de PHP ou les binaires Win32 peuvent être obtenus sur le site web de PHP.

  • Une fois vérifié que vous avez PHP installé et fonctionnel, vous avez besoin d’obtenir les dernières sources de MapServer et de compiler MapServer et le module PHP associé.

Configurer PHP sur votre serveur

Unix

  • Vérifiez si vous avez déjà PHP d’installé (de nombreuses distributions Linux l’ont, installé par défaut).

  • Si ce n’est pas le cas, voir la section “Installation sous les systèmes Unix” du manuel de PHP.

Windows

Note

Quand vous configurez PHP sous Windows, bérifiez bien que PHP est configuré comme un module CGI pas comme un module Apache parce que php_mapscript.dll n’est pas “thread-safe” et ne marche pas comme un module Apache (Voir la section Exemple d’étapes d’une installation complète sous Windows de ce document).

Compiler/installer le module PHP/MapScript

Compiler sur une machine Linux

NOTE : Pour les utilisateurs UNIX, lisez le fichier README.CONFIGURE dans les sources MapServer ou voir le HowTo Compiler sous Unix.

  • Le script “configure” principal de MapServer configurera automatiquement le makefile principal pour compiler php_mapscript.so si vous passez l’argument –with-php=DIR au script configure.

  • Copiez la bibliothèque php_mapscript.so dans votre répertoire d’extensions PHP, et ensuite utilisez la fonction dl() pour charger le module au début de vos scripts PHP. Voir aussi la fonction PHP extension_loaded() pour vérifier si une extension est déjà chargée.

  • Le fichier mapscript/php3/examples/phpinfo_mapscript.phtml testera que le module php_mapscript est correctement installé et chargé.

  • Si vous avez une erreur de PHP qui se plaint que la bibliothèque ne peut être chargée, alors assurez-vous que vous avez recompilé et réinstallé PHP avec le support des bibliothèques dynamiques. Sur RedHat 5.x et 6.x, cela signifie d’ajouter “-rdynamic” au CLDFLAGS dans le Makefile PHP3 principal après avoir lancé ./configure Vérifier aussi que tous les répertoires dans le chemin vers l’emplacement de php_mapscript.so sont au moins à r-x pour l’utilisateur du service Apache (habituellement ‘nobody’), autrement dl() risque de se plaindre qu’il ne trouve pas le fichier même s’il est présent.

Compiler sous Windows

  • For Windows users, it is recommended to look for a precompiled binary for your PHP version on the MapServer download page or use the MS4W installer.
  • Si pour une raison donnée, vous avez vraiment besoin de compiler votre propre binaire Windows, alors regardez ke fichier README.WIN32 dans les sources de MapServer (bonne chance!).

Installer PHP/MapScript

Copier simplement le fichier php4_mapscript.dll dans votre répertoire d’extensions PHP4 (pathto/php/extensions)

Utiliser phpinfo()

Pour vérifier que PHP et PHP/MapScript ont été installés correctement, créez un fichier ‘.php’ contenant le code suivant et essayez d’y accéder via votre serveur web:

<HTML>
<BODY>

<?php
  if (PHP_OS == "WINNT" || PHP_OS == "WIN32")
  {
    dl("php_mapscript.dll");
  }
  else
  {
    dl("php_mapscript.so");
  }
  phpinfo();
?>

</BODY>
</HTML>

Si PHP et PHP/MapScript sont installés correctement, plusieurs tables devraient être affichées dans votre page, et ‘MapScript’ devrait être listé dans la table ‘Extensions’.

Exemple d’étapes d’une installation complète sous Windows

Utiliser MS4W (MapServer pour Windows)

  1. Télécharger la dernière version du paquet MS4W.

  2. Extraire les fichiers de l’archive dans le répertoire racine d’un de vos lecteurs disque (comme. C:/ ou D:/).

  3. Faire un double-clic sur le fichier /ms4w/apache-install.bat pour installer et démarrer le serveur web Apache.

  4. Dans un navigateur web, allez sur http://127.0.0.1. vous devriez voir une page d’ouverture pour MS4W. Vous faites maintenant fonctionner PHP, PHP/MapScript, et Apache.

  5. Vous pouvez en option installer d’autres applications qui sont préconfigurées pour MS4W, qui sont situées dans sur la page de téléchargement de MS4W.

Installation manuelle en utilisant le serveur web Apache

  1. Télécharger le serveur web Apache et l’extraire à la racine d’une répertoire (par exemple D:/Apache).

  2. Télécharger PHP4 et l’extraire dans votre dossier Apache (par exemple D:/Apache/PHP4).

  3. Créer un répertoire temporaire pour stocker les GIF créés par MapServer. NOTE: Ce répertoire est spécifié dans le paramètre IMAGEPATH de l’objet WEB dans la référence du Mapfile. Pour cet exemple, nous appellerons le répertoire temporaire “ms_tmp” (par exemple E:/tmp/ms_tmp).

  4. Identifier l’emplacement du fichier httpd.conf dans le répertoire conf de Apache, et l’ouvrir dans un éditeur de texte (comme TextPad, Emacs, Notepad).

    Dans la section Alias de ce fichier, ajouters des alias au dossier ms_tmp et tout autre dossier dont vous avez besoin (pour cet exemple, nous utiliserons le dossier msapps):

    Alias   /ms_tmp/   "path/to/ms_tmp/"
    Alias   /msapps/   "path/to/msapps/"
    

    Dans la section ScriptAlias de ce fichier, ajouter un alias pour le dossier PHP4.

    ScriptAlias    /cgi-php4/     "pathto/apache/php4/"
    

    Dans la section AddType de ce fichier, ajouter un type pour les fichiers php4.

    AddType application/x-httpd-php4   .php
    

    Dans la section Action de ce fichier, ajouter une action pour le fichier php.exe.

    Action application/x-httpd-php4    "/cgi-php4/php.exe"
    
  5. Copier le fichier php4.ini-dist situé dans votre répertoire Apache/php4 et le copier dans votre dossier WindowsNT folder (comme c:/winnt), et ensuite, renommer ce fichier en php.ini dans votre dossier WindowsNT.

  6. Si vous voulez des extensions spécifiques chargées par défaut, ouvrir le fichier php.ini dans l’éditeur de texte et décommenter l’extension appropriée.

  7. Placer le fichier php_mapscript.dll dans votre dossier Apache/php4/extensions

Installation en utilisant Microsoft IIS

(merci de voir le document sur Paramétrage de IIS pour MapServer pour avoir les différentes étapes)

  1. Install IIS if required (see the IIS installation procedure).

  2. Installer PHP et PHP/MapScript (voir ci-dessus).

  3. Ouvrir le gestionnaire de service Internet (c’est à dire’ C/WINNT/system32/inetsrv/inetmgr.exe).

  4. Sélectionner le site web par défaut et créer un répertoire virtuel (faire un clic droit, sélectionner Nouveau/Répertoire virtuel). Pour cet exemple, nous appelerons le répertoire msapps.

  5. Dans le champ Alias, entrer msapps et cliquer sur Suivant.

  6. Entrer le chemin de la racine de votre application (c’est à dire “c:/msapps”) et cliquer sur Suivant.

  7. Définir les permisions du répertoire Set the directory et cliquer sur Terminer.

  8. Sélectionner le répertoire virtuel msapps précédemment créé et ouvrez les propriétés du répertoire (en cliquant droit et sélectionnant propriétés) puis cliquez sur l’onglet Répertoire virtuel.

  9. Cliquez sur le bouton Configuration puis cliquez l’onglet “Mapping App”.

  10. Cliquez sur Ajouter et dans la boîte Exécutable entrez : path/to/php4/php.exe %s %s. Vous DEVEZ avoir %s %s à la fin, PHP ne fonctionnera pas correctement si vous ne réalisez pas ceci. Dans la boîte Extension, entrez l’extension du nom du fichier à associer avec vos scripts PHP. Les extensions habituels qui doivent être associées sont phtml et php. Vous devez répéter cette étape pour chaque extension.

  11. Créer un répertoire temporaire dans Explorateur pour stocker les GIF créés par MapServer.

    Note

    Ce répertoire est définie dans le paramètre IMAGEPATH de l’objet WEB dans le Mapfile. Pour cet exemple nous appellerons le répertoire temp ms_tmp (eg. C:/tmp/ms_tmp).

  12. Ouvrir le gestionnaire de service Internet à nouveau.

  13. Sélectionner le site web par défaut et créer un répertoire virtuel (faites un clic droit, sélectionner Nouveau/Répertoire virtuel). Définissez le chemin au répertoire ms_tmp (eg. C:/tmp/ms_tmp) . Les permissions du répertoire doivent au moins être permettre les accès en Lecture/Écriture.

FAQ / Problèmes communs

Questions à propos de la documentation

Q:

Il y a une documentation disponible?

A:

Le principal document de référence est la référence PHP MapScript, qui décrit toutes les classes actuelles, propriétés et méthodes associées avec le module PHP/MapScript.

Pour obtenir une description plus complète de chaque classe et la signification de leurs variables membres, lisez la Référence de MapScript et la référence du MapFile.

Le Wiki MapServer a aussi des notes sur la compilation et l’installation de PHP/MapScript et quelques exemples de codes php.


Q:

**Où puis-je trouver des scripts exemple

A:

Plusieurs exemples sont inclus dans le dossier mapserver/mapscript/php3/examples/ dans les sources de la distribution MapServer. Un bon exemple pour démarrer est test_draw_map.phtml : c’est un script très simple qui dessine juste une carte, légende et une barre d’échelle dans une page HTML.

Un bon exemple intermédiaire est le Guide par l’exemple de PHP MapScript (notez que ce document a été créé pour une version plus ancienne de MapServer mais le code est toujours utile).

The original example is the “Gmap demo”, download the whole source and data files from the MapTools.org download page.

Questions à propos de l’installation

Q:

Comment puis-je dire que le module est correctement installé sur mon serveur ?

A:

Créer un fichier appelé phpinfo.phtml avec le contenu suivant :

<?php  dl("php_mapscript.so");
       phpinfo();
?>

Assurez-vous que vous remplacez le php_mapscript.so avec le nom sous lequel vous l’avez installé, il pourrait être php_mapscript_46.so sous Unix ou sous Windows php_mapscript_46.dll

Vous pouvez alors essayer la seconde page de test mapserver/mapscript/php3/examples/test_draw_map.phtml. Cette page ouvre simplement un fichier .map de MapServer et insère une carte, une légende, et une barre d’échelle dans une page HTML. Modifiez la page pour accéder à l’un de vos fichier .map pour MapServer et si vous obtenez le résultat expéré, alors tout fonctionne probablement correctement.


Q:

J’essaie d’afficher ma page .phtml ou .php dans mon navigateur mais la page s’affiche comme elle le ferait dans Notepad.

A:

Votre problème est que votre installation de PHP ne reconnaît pas l’extension de fichier ”.phtml” comme extension PHP. En supposant que vous utilisez PHP4 sous Apache vous devez alors ajouter la ligne suivante avec les autres lignes AddType lié à PHP dans le fichier httpd.conf :

AddType application/x-httpd-php .phtml

Pour des informations plus détaillées, lisez la section Étapes sous forme d’exemples d’une installation sous Windows complète de ce document.


Q:

J’ai installé PROJ.4, GDAL ou l’un des bibliothèques des dépendances sur mon système, elle est reconnu par le configure de MapServer comme bibliothèque système mais au lancement j’obtiens : “libproj.so.0: No such file or directory”.

A:

Vous êtes probablement sous un système Linux Red Hat si cela vous arrive. En effet les bibliothèques s’installent dans le répertoire /usr/local/lib mais ce répertoire ne fait pas partie du chemin des bibliothèques lors du lancement par défaut sur votre système.

(I’m still surprised that “configure” picked PROJ.4 as a system lib since it’s not in the system’s lib path...probably something magic in autoconf that we’ll have to look into)

Il y a plusieurs solutions possibles :

  1. Ajouter un “setenv LD_LIBRARY_PATH” à votre httpd.conf pour contenir ce répertoire

  2. Éditez le fichier /etc/ld.so.conf pour ajouter /usr/local/lib, puis lancez la commande “/sbin/ldconfig”. Cela ajoutera de manière permanente le répertoire /usr/local/lib au chemin des bibliothèques à votre système.

  3. Configurez MapServer avec les options suivantes :

    --with-proj=/usr/local --enable-runpath
    

    et le répertoire /usr/local/lib sera codé en dur dans les fichiers .so et exe.

I (Daniel Morissette) préfère personnellement l’option #2 parce qu’elle est permanente et s’applique à tout ce qui fonctionne sur votre système.


Q:

Est ce que PHP/MapScript doit être définie en tant que CGI ? Si oui, pourquoi ?

A:

Oui, s’il vous plait lisez la PHP/MapScript CGI page dans le wiki MapServer pour les détails.


Q:

j’ai compilé PHP en tant que CGI et quand PHP tente de charger le fichier php_mapscript.so, j’obtiens une erreur “undefined symbol: _register_list_destructors” error. Qu’est ce qui ne va pas ?

A:

Votre exécutable CGI PHP n’est probablement pas lié à la gestion du chargement des bibliothèques partagées. Le script configure de MapServer aurait dû vous donner un message à propos d’une option à ajouter au Makefile PHP pour activer les bibliothèques partagées.

Éditez le Makefile PHP principal et ajoutez “-rdynamic” au LDFLAGS en haut du Makefile, puis compilez de nouveau l’exécutable PHP.

Note : Le paramètre actuel pour ajouter LDFLAGS peut être différent en fonction du système sur lequel vous travaillez. Sous Linux c’est “-rdynamic”, et sur *BSD c’est “-export-dynamic”.


Q:

Quelles sont les meilleurs combinaisons entre les versions de MapScript et PHP?

A:

Les meilleures combinaisons sont:

  • MapScript 4.10 avec PHP 5.2.1 et plus

  • MapScript 4.10 avec PHP 4.4.6 et plus