Accueil
Rechercher:
sur developpez.com sur les forums
Forums | Tutoriels | F.A.Q's | Participez | Hébergement | Contacts
Accueil Conception Java DotNET Visual Basic  C  C++ Delphi MS-Office SQL & SGBD Oracle  4D  Business Intelligence
Club Emploi Blogs   TV   Dév. Web PHP XML Python Autres 2D-3D-Jeux Sécurité Windows Linux PC Mac
FORUM PHP FAQ PHP COURS PHP SOURCES PHP LIVRES PHP SCRIPTS PHP OUTILS PHP COMPARATIFS PHP TV Zend Framework

Utiliser simultanément plusieurs versions de PHP sous Windows

Date de publication : 06/11/2007

Par julp (Autres articles)
 

Le but est de pouvoir utiliser simultanément plusieurs versions différentes de PHP sur le même serveur sans avoir à réaliser par la suite différentes manipulations pour passer de l'une à l'autre. L'approche présentée concerne uniquement le système Windows, puisque cette démarche repose sur la base de registre.

Il s'agit ici d'une solution simple adaptée à un environnement de développement où les performances et la sécurité ne sont pas particulièrement recherchées.


            

1. Présentation
2. Installation des différentes versions de PHP
2.1. PHP 5, en tant que module
2.2. PHP 4 et PHP 6 en CGI
3. Epilogue


1. Présentation

La finalité est d'avoir un environnement de développement où il serait possible d'utiliser toutes les versions de PHP voulues. La distinction serait assurée par l'extension des scripts :
  • .php : associée à la version courante de production (PHP 5) ;
  • .php4 : version précédente (PHP 4) ;
  • .php6 : version en développement amenée à être la prochaine version de production (PHP 6).
Il n'est cependant pas possible de faire fonctionner en même temps sur un même serveur plusieurs versions de PHP en tant que module Apache. Comment donc gérer cette cohabitation ? Nous ferons en sorte que la version principale de PHP (5) soit utilisée comme module alors que les autres seront appelées via l'interpréteur dit CGI.

Les pré-requis à réunir quant à la suite de cet article sont les suivants :
  • Etre en possession d'un système Windows et des droits adéquats pour réaliser certaines opérations ;
  • Disposer d'un serveur Apache de la branche 2.0 ou plus récent.

2. Installation des différentes versions de PHP

Nous devons donc configurer pour chaque instance de PHP la manière dont elle sera amenée à être utilisée par Apache : module ou CGI.


2.1. PHP 5, en tant que module

A moins de pouvoir et vouloir recompiler PHP en passant par les sources, vous devez télécharger le paquet zip depuis la page de téléchargement de PHP.

Décompressez ensuite cette archive à un emplacement que vous aurez choisi avec soin. Puis modifiez la configuration d'Apache pour charger le module :
# Apache 2.0
#LoadModule php5_module "C:/.../php5/php5apache2.dll"
# Apache 2.2
LoadModule php5_module "C:/.../php5/php5apache2_2.dll"
Ainsi qu'associer l'extension des scripts à interpréter à celui-ci :
# Apache 2.0
#<IfModule mod_php5.c>
# Apache 2.2
<IfModule php5_module>
    # Association de l'extension au module pour l'interprétation
    AddType application/x-httpd-php .php
    # Changer l'emplacement par défaut du fichier php.ini
    PHPIniDir C:/.../php5/
</IfModule>

2.2. PHP 4 et PHP 6 en CGI

A l'heure actuelle, l'endroit où vous trouverez le nécessaire pour chacune d'entre elles dépend de la version :
  • PHP 4 :

    Télécharger l'archive zip contenant les binaires pour Windows sur la page de téléchargement de PHP puis extrayez celle-ci à l'emplacement choisi.

  • PHP 6 :

    En ce qui concerne cette version, la procédure est quelque peu différente du fait qu'elle est encore en développement : nous récupèrerons une version compilée des sources actuelles qui sont mises à jour régulièrement sur le site nommé snaps de PHP. Dépaquetez-la ensuite à l'endroit voulu.

    warning Cette version étant en constante évolution, elle peut tout à fait être inutilisable. Il faudra donc prendre un snapshot plus vieux ou faire preuve de patience pour que les bugs les plus graves soient corrigés.
Il sera nécessaire de nous montrer plus permissif sur les contrôles effectués au niveau des requêtes avant que PHP ne décide d'interpréter le script en créant le fichier php.ini à partir d'un des deux modèles fournis (php.ini-dist ou php.ini-recommended) et de modifier la valeur par défaut de la directive cgi.force_redirect :
cgi.force_redirect = 0
La configuration d'Apache nécessite certainement les ajustements suivants :
ScriptInterpreterSource Registry
AddHandler cgi-script php4 php6
Options +ExecCGI
La directive ScriptInterpreterSource et la valeur Registry indique à Apache d'aller chercher le chemin de l'interpréteur dans la base de registre à partir de l'extension du script.

Il nous faut ensuite que les scripts soient considérés comme des scripts cgi afin qu'ils soient interprétés au lieu que la source ne soit simplement renvoyée au client. C'est ce que nous réalisons à l'aide de la directive AddHandler.

Enfin, l'exécution des scripts CGI par le serveur doit être permise. Ce n'est généralement pas le cas d'une configuration par défaut pour des raisons de sécurité. Nous l'explicitions par la directive Options et sa valeur +ExecCGI.


Il nous faudra ensuite créer l'arborescence suivante dans la base de registre :
HKEY_CLASSES_ROOT
    .php4
        Shell
            ExecCGI
                Command
                    (valeur par défaut) => Chemin vers l'interpréteur PHP 4
    .php6
        Shell
            ExecCGI
                Command
                    (valeur par défaut) => Chemin vers l'interpréteur PHP 6
Chose que vous pouvez réaliser manuellement ou bien en laisser le soin à Windows en passant par l'éditeur du registre. Dans le deuxième cas, un fichier d'extension .reg doit être créé tel que :
php-cgi.reg
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\.php4]
@="php4file"

[HKEY_CLASSES_ROOT\.php4\Shell]

[HKEY_CLASSES_ROOT\.php4\Shell\ExecCGI]

[HKEY_CLASSES_ROOT\.php4\Shell\ExecCGI\Command]
@="C:\\...\\php4\\php.exe"

[HKEY_CLASSES_ROOT\.php6]
@="php6file"

[HKEY_CLASSES_ROOT\.php6\Shell]

[HKEY_CLASSES_ROOT\.php6\Shell\ExecCGI]

[HKEY_CLASSES_ROOT\.php6\Shell\ExecCGI\Command]
@="C:\\...\\php6\\php-cgi.exe"
info Adaptez les chemins avant et remarquez que les antislashs sont doublés lorsqu'ils figurent comme valeur dans le fichier d'inscription au registre.
Le simple fait de double cliquer sur celui-ci devrait alors l'exécuter, rendant ainsi ces modifications effectives.


3. Epilogue

Le procédé présenté, consistant à associer les scripts suivant leur extension, à leur interpréteur respectif via la base de registre peut être utilisé pour tout autre langage interprété tel Perl, Ruby, etc.

info J'ouvre ici une petite parenthèse afin d'anticiper toute question liée à la configuration de PHP et plus particulièrement au sujet de l'activation des extensions : une édition du fichier php.ini sera sans doute requise afin d'activer les extensions dont vous pourriez avoir besoin. Cela implique que les chemins pour les retrouver, indiqués par la directive extension_dir, sont corrects.
Liens Developpez :


            

Valid XHTML 1.1!Valid CSS!

Copyright © 2007 julp. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. Cette page est déposée à la SACD.

Responsable bénévole de la rubrique PHP : Guillaume Rossolini - Contacter par EMail :
Vos questions techniques : forum d'entraide PHP - Publiez vos articles, tutoriels et cours
et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones
Nous contacter - Copyright © 2000-2008 www.developpez.com - Legal informations.