Plusieurs versions de PHP sur un même serveur
Via Nexen.net, je suis tombé sur deux articles traitant de l'installation de deux versions (ou plus de PHP) sur un même serveur Apache :
- Switching Between Multiple php Versions Using Apache on Windows
- Install PHP5 and PHP4 on the same Apache server
Dans mon esprit, le fait d'avoir deux installations de PHP en parallèle sert à pouvoir tester et rendre portables ses développements afin de rendre un déploiement facile et sans surprise. Le but est donc de passer d'une version de PHP à l'autre rapidement pour un même script afin de voir les éventuels problèmes ou différences de comportement (je suis assez adepte du Ctrl + Tab
sous Firefox).
Ce qui me chagrine dans les deux articles précédent est que pour l'un on utilise deux services différents pour Apache et on passe d'une version à l'autre de PHP en arrêtant le service avec PHP4 et en lançant celui avec PHP5. Cela ne me semble pas très pratique du point de vue rendement et rapidité de développement surtout si l'on teste son application au fur et à mesure de la construction des scripts et non pas une fois tout fini. Le deuxième article est le pire à mon sens car il joue sur l'extension de fichiers pour passer de l'une à l'autre des versions avec par ex .php
pour PHP5 et .php4
pour PHP4 ; je n'imagine même pas comment il fait pour éviter de renommer ou dupliquer ses scripts... peut-être avec de l'url rewriting ?
Pour m'être penché sur la question et avoir écrit un article là-dessus il y a quelques temps (indisponible pour le moment), j'en suis arrivé à la configuration suivante : une version de PHP installée en tant que module pour le site par défaut d'Apache et une autre version installée en CGI mais dans un VirtualHost, ce qui permet de conserver la même extension et de ne pas relancer sans cesse les services pour passer d'une version à l'autre (le VirtualHost peut être basé sur un nom de domaine, IP ou numéro de port - c'est cette dernière solution que j'utilise au quotidien).
En supposant que vous venez d'installer Apache, voici la marche à suivre (sous Windows) :
- Décompressez l'archive de PHP4 dans le répertoire de votre choix (
C:/php/php4
par exemple) ; - Placer votre fichier
php.ini
dans le répertoire contenant l'exécutable d'Apache (Apache.exe
) ; - Ajouter les lignes suivantes à la fin votre fichier
httpd.conf
:
LoadModule php4_module “C:/php/php4/php4apache.dll” AddType application/x-httpd-php .php
- Décompressez l'archive de PHP5 dans
C:/php/php5
; - Ajouter les lignes suivantes à la fin de votre fichier
httpd.conf
:Listen 81 NameVirtualHost *:81 <VirtualHost *:81> SetEnv PHPRC "C:/php/php5" ScriptAlias /php5/ "C:/php/php5" Action php5-script /php5/php-cgi.exe AddHandler php5-script .php </VirtualHost>
- Remplacer la ligne
Port 80
parListen 80
dans votre fichierhttpd.conf
.
En lançant ou relançant Apache, vous devriez maintenant avec les deux versions de PHP en même via les adresses alhost/
pour PHP4 et http://localhost:81
pour PHP5.
Commentaires
-
oam a écrit le 13/12/2005 :
Cette astuce est très intéressante.
Personnellement, j'aimerais faire le contraire à partir de WAMP. WAMP install php5 par défaut et je voudrais rajouter la version php 4.2.0 (pour des raisons de compatibilité d'anciens scripts !).
Quels sont les paramètres du seveur virtuel à fournir ?
Merci. -
oam a écrit le 13/12/2005 :
et la solution est...
Listen 81
NameVirtualHost *:81
SetEnv PHPRC "C:/Program Files/EasyPHP 1.6/php"
ScriptAlias /php4/ "C:/Program Files/EasyPHP 1.6/php"
Action application/x-httpd-php "/php4/php.exe"
-
Thierry Bothorel a écrit le 15/01/2006 :
Cette astuce est effectivement intéressante. Pour ma part, j'en étais resté à renommer le répertoire PHP en PHP4 puis PHP5 en PHP, éditer http.conf pour commenter/décommenter les 3/4 lignes concernant PHP et à redémarrer Apache. Pénible, mais j'y suis obligé car ni la solution présentée ici ni celle des liens ne résoud mon problème. J'ai installé le système PEAR et l'utilise beaucoup. PEAR fait appel à beaucoup de variables contenant le chemin de beaucoup de répertoires, dans le fichier PEAR.INI et dans la base de registre. Avec ma méthode au moins tout continue à fonctionner après le changement de PHP, il me suffit de recopier /php/pear.ini et /php/PEAR/ dans le nouveau dossier PHP actif. Dans les autres méthodes, les chemins ne seront plus à jour au changement de version.
Pour rendre PEAR indépendant de la version de PHP, j'ai pensé à une solution, déplacer le dossier /PHP/PEAR/ d'un niveau au dessus, et modifier une fois pour toute les chemins dans la base de registre, ce qui rendrait PEAR indépendant et éviterait de recopier le dossier dans les autres dossiers /php/ à chaque changement de version de php utilisée (l'installation d'un package en php4 deviendrait disponible automatiquement en php5).
Mais il y a un "MAIS", certaines des variables PEAR ne pointent pas vers PEAR mais vers PHP, c'est là que çà coincerait en cas de changement de version. En plus le fichier /php/pear.ini qui contient ces variables deviendrait différent pour chaque php, et en cas de changement de la config pear, le mettre à jour à la main serait vite très pénible, car les données sont stockée sous forme de tableau 'sérialisé' !Bref , je crois que je vais rester à ma méthode !
-
pilgrim a écrit le 16/01/2006 :
Pour ma part, j'utilse PEAR pour la connexion aux bases de données (PEAR::DB) et parfois pour le package PEAR::Text_Wiki. Seulement, j'ajoute juste les fichiers dans mon répertoire d'inclusion qui est le même pour les différentes versions de PHP installées. Je ne savais pas que PEAR possédait un fichier
pear.ini
ni qu'il avait ses entrées dans la base de registre. Pour moi, PEAR est quand même une sacré usine à gaz par moment et son utilisation "basique" me suffit amplement. Je ne sais pas comment font ceux qui utilisent au maximum les packages de PEAR pour passer sur des hébergements mutualisés quand PEAR n'est pas installé ou qu'il ne contient pas les packages requis. Je ne vois pas l'hébergeur donner accès au shell pour lancer un "go-pear"...
Ajouter un commentaire
Il n'est plus possible de réagir à cette entrée directement mais si vous pensez que votre intervention peut être intéressante, envoyez-moi votre commentaire, je l'ajouterai ici en votre nom.