Archives du blog

Apache 2.4 sous Windows – Configurer plusieurs versions de PHP

Il peut être intéressant de disposer de plusieurs versions de PHP sur un même serveur web que ce soit par exemple pour migrer une application en PHP 5.2.X vers une nouvelle version de PHP ou, d’héberger des applications qui utilisent PHP 5.3.X et d’autres PHP 5.4.X.
Pour réaliser une telle configuration il faut obligatoirement que PHP soit configuré en FastCGI.

Dans cet article je vais réaliser une configuration où les versions 5.2, 5.3 et 5.4 de PHP seront installées sur le même serveur.
Je ne parlerai pas de la configuration de PHP (fichier php.ini).

Pour réaliser cette configuration voici comment seront organisés mes dossiers

Le dossier d’Apache e:\serveur_web\apache24
Le dossier des sites web e:\serveur_web\www
Le dossier de PHP e:\serveur_web\php

Pré-requis : votre serveur apache est installé et opérationnel.

Installation de FastCGI dans Apache

Téléchargez le fichier mod_fcgid-2.3.7-win32.zip sur le site http://www.apachelounge.com/download/
Ouvrez ce zip, allez dans le dossier mod_fcgid puis extraire le fichier mod_fcgid.so dans e:\serveur_web\Apache24\modules.
Ouvrez le fichier e:\serveur_web\apache24\conf\httpd.conf
Dans la partie du fichier où se trouvent tous les loadmodule ajoutez à la fin la ligne

LoadModule fcgid_module modules/mod_fcgid.so

Mise en place de PHP

Téléchargez sur le site http://windows.php.net/download les fichiers zip des versions non thread safe de chacune des branches de PHP (5.2, 5.3, 5.4).
Créez un dossier par version de php dans e:\serveur_web\php puis décompressez les fichiers zip dans ces dossiers comme indiqué ci-dessous

Fichier Répertoire de destination
PHP 5.4.9
(php-5.4.9-nts-Win32-VC9-x86.zip)
e:\serveur_web\php\5_4_9
PHP 5.3.19
(php-5.3.19-nts-Win32-VC9-x86.zip)
e:\serveur_web\php\5_3_19
PHP 5.2.17
(php-5.2.17-nts-Win32-VC6-x86.zip)
e:\serveur_web\php\5_2_17

A la fin de ces 2 opérations, FastCGI est installé dans Apache et 3 versions de PHP sont disponibles.

Maintenant, nous allons voir comment utiliser une version différente de PHP pour chacun de nos serveurs virtuels.

Configuration de FastCGI

La plupart du temps lorsque l’on configure PHP dans Apache on rajoute les lignes dans le fichier httpd.conf qui permettent d’interpréter les fichiers php de n’importe lequel de  nos serveurs virtuels.

Pour pouvoir utiliser plusieurs versions de PHP, il faut procéder différemment.

Créez 3 fichiers conf dans le dossier e:\serveur_web\apache24\conf\extra pour chacune des versions de PHP comme indiqué ci-dessous.

PHP Fichier Contenu du fichier
5.4.9 Php54.conf FcgidInitialEnv PHPRC "E:\serveur_web\php\5_4_9"
<FilesMatch \.php$>
AddHandler fcgid-script .php
FcgidWrapper "e:\serveur_web\php\5_4_9\php-cgi.exe" .php
</FilesMatch>
5.3.19 Php53.conf FcgidInitialEnv PHPRC "E:\serveur_web\php\5_3_19"
<FilesMatch \.php$>
AddHandler fcgid-script .php
FcgidWrapper "E:\serveur_web\php\5_3_19\php-cgi.exe" .php
</FilesMatch>
5.2.17 Php52.conf FcgidInitialEnv PHPRC "E:\serveur_web\php\5_2_17"
<FilesMatch \.php$>
AddHandler fcgid-script .php
FcgidWrapper "E:\serveur_web\php\5_2_17\php-cgi.exe" .php
</FilesMatch>

Il faudra également ajouter ExecCGI à la directive Options pour chacun de vos serveurs virtuels dans le fichier httpd-vhosts.conf.

Tout est en place pour pouvoir utiliser plusieurs versions de PHP.

Réalisation de  la configuration avec plusieurs versions de PHP

Maintenant, je vais réaliser la configuration suivante

Serveur virtuel Version de PHP
http://www.site1.fr/ 5.2.17
http://www.site2.fr/ 5.3.19
http://www.site3.fr/ 5.4.9
http://www.site4.fr/ 5.4.9

En reprenant le fichier httpd-vhosts.conf créé dans l’article 2, ajoutez en début de section virtualhost un Include conf/extra/phpxx.conf suivant la version de PHP que vous souhaitez utiliser; par exemple, pour utiliser la version 5.2.17 pour le site1 ajoutez Include conf/extra/php52.conf dans la section virtualhost correspondant au site1.

N’oubliez pas également d’ajouter ExecCGI si vous ne l’avez pas fait auparavant.

Voici le contenu de ce fichier

<VirtualHost *:80>
Include conf/extra/php52.conf
ServerName www.site1.fr
DocumentRoot "E:/serveur_web/www/site1"
<Directory "E:/serveur_web/www/site1">
Options Indexes FollowSymLinks ExecCGI
AllowOverride All
Require all granted
</Directory>
CustomLog "logs/site1/site1-access.log" common
ErrorLog "logs/site1/site1-error.log"
</VirtualHost>
<VirtualHost *:80>
Include conf/extra/php53.conf
ServerName www.site2.fr
DocumentRoot "E:/serveur_web/www/site2"
<Directory "E:/serveur_web/www/site2">
Options Indexes FollowSymLinks ExecCGI
AllowOverride All
Require all granted
</Directory>
CustomLog "logs/site2/site2-access.log" common
ErrorLog "logs/site2/site2-error.log"
</VirtualHost>
<VirtualHost *:80>
Include conf/extra/php54.conf
ServerName www.site3.fr
DocumentRoot "E:/serveur_web/www/site3"
<Directory "E:/serveur_web/www/site3">
Options Indexes FollowSymLinks ExecCGI
AllowOverride All
Require all granted
</Directory>
CustomLog "logs/site3/site3-access.log" common
ErrorLog "logs/site3/site3-error.log"
</VirtualHost>
<VirtualHost *:80>
ServerName www.site4.fr
DocumentRoot "E:/serveur_web/www/site4"
<Directory "E:/serveur_web/www/site4">
Options Indexes FollowSymLinks ExecCGI
AllowOverride All
Require all granted
</Directory>
CustomLog "logs/site4/site4-access.log" common
ErrorLog "logs/site4/site4-error.log"
</VirtualHost>

Enregistrez le fichier puis redémarrez le serveur Apache.

Créez dans chacun des répertoires de vos serveurs virtuels un fichier index.php contenant

< ?php phpinfo(); ?>

Dans votre navigateur, saisir l’adresse http://www.site1.fr/index.php.
La page de configuration de PHP doit apparaitre et indiquez que vous utilisez la version 5.2.17.
Saisissez l’adresse http://www.site2.fr/index.php.
La page de configuration de PHP doit apparaitre et indiquez que vous utilisez la version 5.3.19.
Enfin saisissez l’adresse http://www.site3.fr/index.php.
La page de configuration de PHP doit apparaitre et vous indiquez que vous utilisez la version 5.4.9.
Vous pouvez remarquer que les 3 sites utilisent une version différente de PHP.
Maintenant si vous saisissez l’adresse http://www.site4.fr/index.php rien ne s’affiche.
C’est tout à fait normal puisqu’aucune configuration de PHP n’est déclarée dans la section du site4 donc Apache va regarder dans son fichier de configuration générale (httpd.conf) et il n’y a pas non plus de configuration de PHP.
Nous allons ajouter Include conf/extra/php54.conf à la fin du fichier httpd.conf.
Enregistrer le fichier puis redémarrer le serveur Apache.
Dans votre navigateur saisissez l’adresse http://www.site4.fr/index.php.
Cette fois ci la page de configuration de PHP doit apparaitre et indiquez que vous utilisez la version 5.4.9. Cela signifie que par défaut PHP 5.4.9 sera utilisé pour vos sites.
Vous pouvez retirer Include conf/extra/php54.conf du fichier httpd-vhosts.conf dans la section correspondant au site3.

Maintenant vous etes capables de faire fonctionner plusieurs versions de PHP sur un meme serveur 🙂
Comme d’habitude, n’hésitez pas à laisser un commentaire pour toutes questions ou autres à propos de cet article.