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
Décompressez ensuite cette archive à un emplacement que vous aurez
choisi avec soin. Puis modifiez la configuration d'Apache pour
charger le module :
LoadModule php5_module "C:/.../php5/php5apache2_2.dll"
|
Ainsi qu'associer l'extension des scripts à interpréter à celui-ci :
<IfModule php5_module>
AddType application/x-httpd-php .php
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 :
-
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.
 |
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 :
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"
|
 |
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.
 |
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 :


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.