Alterner entre plusieurs versions d'Apache et de PHP

Guillaume Rossolini

Ce tutoriel vous aidera à mettre en place un environnement httpd (Apache) + PHP sous Windows, avec plusieurs versions de chacun de ces logiciels. Le logiciel Apache Service Monitor, installé par défaut avec httpd, vous permettra de changer facilement d'une version à l'autre.

Ce cours s'adresse aux développeurs qui ont déjà quelques connaissances en PHP. L'idée générale peut être utilisée sous divers systèmes d'exploitation, mais je laisse au lecteur le soin d'adapter les procédures décrites ici. Seule l'installation des logiciels est différente d'un système à l'autre, mais c'est un autre débat : l'intérêt ici est de se former à leur configuration.

Nous n'installerons aucun logiciel de base de données et aucun éditeur de code dans ce tutoriel. Si vous en avez besoin, reportez-vous à d'autres articles.

Commentez ♪

- Titre : Alterner entre plusieurs versions d'Apache et de PHP

- Auteur : Guillaume Rossolini

- Parution : 11 octobre 2006

- Mise à jour : 29 novembre 2009

- Licence : Copyright ® 2006 Guillaume Rossolini. 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'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- I. Introduction

- I-A. Remerciements

- I-B. Pourquoi avoir besoin de plusieurs versions différentes en même temps ?

- I-C. Préambule

- I-D. Correspondances de versions

- I-E. Logiciels requis

- I-E-1. Apache httpd

- I-E-2. PHP

- I-E-3. Sysinternals Junction

- II. Mise en place du serveur

- II-A. Préambule

- II-B. PHP

- II-C. Apache httpd

- II-C-1. Préparation des répertoires

- II-C-2. Installation

- II-C-3. Configuration des instances httpd

- II-C-4. Installation des services Windows

- II-C-5. Note

- III. Maintenance des services configurés

- III-A. Installer une version plus récente d'Apache httpd

- III-B. Installer une version plus récente de PHP

- III-C. Revenir à une version antérieure d'Apache httpd

- III-D. Revenir à une version antérieure de PHP

- III-E. Que faire si phpinfo() n'affiche pas la bonne version de PHP ?

- IV. Conclusion

- IV-A. Épilogue

- IV-B. Liens

I - Introduction

I-A - Remerciements

Je remercie wamania et pcaboche pour leur relecture attentive et pour leurs conseils lors de la rédaction de la version initiale (2006) de cet article.

I-B - Pourquoi avoir besoin de plusieurs versions différentes en même temps ?

Lorsque l'on développe des applications Web, il est souvent utile, voire nécessaire, de prévoir le comportement de notre application dans diverses situations. Un développeur Web ne maîtrise pas toujours l'hébergement de son client, ce qui le confronte à des versions très variées de logiciels dans la mesure où les hébergeurs suivent généralement les versions de leur distribution Linux, or ces dernières ne mettent pas leurs paquetages à jour au même rythme.

Disposer de plusieurs versions d'Apache httpd et de PHP permet non seulement de consolider vos applications, mais aussi de prendre de l'avance sur l'hébergeur de vos clients. Ainsi, lorsque l'hébergeur de votre client met à jour ses paquetages, vous avez déjà eu le temps de vérifier que vos applications fonctionnent correctement dans ce nouvel environnement.

I-C - Préambule

Que vous soyez débutant ou confirmé, vous avez certainement remarqué la diversité des versions de PHP. Actuellement, la version la plus courante en environnement de production est la branche 5. Il n'y a plus aucun intérêt à laisser en ligne les versions 3 et 4 de PHP.

Toutefois, sous Windows, il y a de très grandes disparités au sein de la branche 5.x : la méthode de compilation avant PHP 5.2.7 utilisait Microsoft Visual Studio 6 (VC6) tandis que, depuis PHP 5.2.7 (ainsi que pour les branches 5.3 et 6.0), le compilateur est devenu Microsoft Visual Studio 2008 (VC9). Cela génère des différences e comportement, surtout si vous souhaitez utiliser PHP en tant que module d'httpd, ce qui est très souvent le cas.

Pourquoi passer de Microsoft Visual C++ 6 à Microsoft Visual Studio 9 ? D'une part, les logiciels compilés avec Microsoft Visual Studio 9 sont plus rapides et plus stables que ceux compilés avec Microsoft Visual C++ 6 ; d'autre part, Visual C++ 6 est tout simplement vieillissant. Chaque nouveau compilateur de la gamme Visual Studio apporte son lot d'améliorations de performances et de stabilité, ainsi que le support et une meilleure intégration dans les nouveaux systèmes d'exploitation de la gamme Windows.

J'ai expliqué les causes de cette différence sur les forums : https://www.developpez.net/forums/d637984-3/php/langage/pensez-php-5-3-a/#post4451568

Jusqu'à la branche 5.2, PHP était compilé avec Microsoft Visual C++ 6, un outil qui n'est plus disponible sur le marché. Il n'est donc plus possible de continuer avec VC6.

Cependant, la quasi-totalité des projets open source sont compilés avec cet outil encore aujourd'hui. Ils ont l'avantage d'avoir des « build box » qui fonctionnent encore, ce qui n'est plus le cas de PHP. Le projet PHP a eu le malheur de voir partir « la » personne qui savait comment fonctionnait la machine de pecl4win… Plus personne ne sait comment la configurer, il a donc été décidé de l'arrêter.

De toute manière, VC6 est… Vieux. Il était grand temps de passer à une nouvelle version du compilateur et de pousser les autres projets open source à faire de même.

La nouvelle optique est de compiler à l'aide de Visual Studio 2008, aka VC9.

Le problème est que les fichiers binaires compilés sous VC9 ont besoin de DLL compilées avec la même version du compilateur, à savoir que l'on ne peut pas utiliser une extension PHP compilée avec VC6, pour un PHP compilé avec VC9. De même, Apache doit lui aussi être compilé avec le même outil que le reste. Lorsqu'il s'agit de mod_php, toute la chaîne doit être compilée avec le même outil. En mode CGI ou FastCGI c'est différent, Apache et PHP peuvent être compilés différemment, mais les extensions doivent néanmoins correspondre à la signature du binaire PHP… Donc le problème reste entier.

Bien entendu, compiler PHP lui-même sous VC9 n'est pas un problème. Il y a de nombreux tutos pour le faire, en voici un exemple : http://wiki.php.net/internals/windows/stepbystepbuild
Pour Apache : https://fabien-faille.developpez.com/tutoriels/apache/windows-compiler/

Cependant, pour compiler PHP, il faut s'assurer que toutes ses dépendances soient aussi compatibles VC9. Il en va de même pour chacune des extensions « core » et de chacune des extensions « PECL ». Chaque extension utilisant une bibliothèque externe doit aussi compiler ces dépendances avec VC9, ce qui suppose de prendre contact avec l'auteur de chacune de ces dépendances afin qu'il mette son projet à jour.

La liste complète des dépendances est disponible ici avec un état des lieux : http://wiki.php.net/internals/windows/libs
La liste complète des dépendances qui ont pu être migrées est disponible ici : http://pecl2.php.net/downloads/php-windows-builds/php-libs/

Cela vous donne une idée de l'énorme quantité de travail faite par la nouvelle équipe de compilation de PHP pour Windows (Pierre, Elizabeth, Garrett et les autres) simplement pour « PHP core ».

Téléchargements :

- PHP compilé pour Windows (VC6 et/ou VC9 suivant le cas) : http://windows.php.net/

- Apache httpd compilé pour Windows (VC9) : http://www.apachelounge.com/

- Extensions PECL compilées pour Windows (adresse temporaire, VC6 et/ou VC9 suivant le cas) : http://downloads.php.net/pierre/

Informations liées :

- Microsoft donne 100 000 $ à l'Apache Software Foundation

- Compiler PHP et toutes ses dépendances sous Windows (MSVS 200x)

- Lancement du cycle de sortie de PHP 5.3

Nous allons utiliser plusieurs versions du serveur Web Apache et tirer profit de l'application « Apache Service Monitor » afin d'installer plusieurs versions de PHP sur l'ordinateur vous servant dans vos développements. De cette manière, il vous sera possible de changer de version de PHP en quelques clics. Bien sûr, un utilisateur chevronné saura tirer profit de cette technique pour installer encore davantage de configurations différentes. Nous nous contenterons ici d'en installer trois.

Comme je l'ai suggéré plus tôt, il est possible d'adapter ce tutoriel de façon à utiliser plusieurs versions identiques de PHP, mais en les configurant différemment.

Avant de commencer, assurez-vous qu'aucun service Windows n'utilise le port 80. En particulier, IIS a tendance à se lancer après certaines mises à jour de Windows : si c'est votre cas, commencez par le désactiver (ainsi que tout autre serveur Web). De même, si vous utilisez Skype, sa configuration par défaut lui permet de monopoliser le port 80 (cela peut se désactiver sans inconvénient).

I-D - Correspondances de versions

Pour installer PHP en tant que module d'httpd, il faut considérer que les flags de compilation doivent être identiques pour les deux programmes. Ils doivent être compilés non seulement avec le même compilateur, mais aussi avec les mêmes options de compilation.

Voici les options de compilation à identifier :

- Thread safety : oui / non ;

- Architecture : x86 (pour processeur 32 bits) ou x64 (pour processeur 64 bits) ;

- Debug : oui / non.

Ces options doivent être identiques pour PHP et pour httpd. C'est pour cela que nous aurons besoin de plusieurs versions d'httpd si nous souhaitons disposer des versions 5.2, 5.3 et 6.0 de PHP.

I-E - Logiciels requis

N'installez aucun logiciel pour le moment. Dans cette partie, nous nous contenterons de télécharger les logiciels que nous souhaitons installer.

I-E-1 - Apache httpd

Nous aurons également besoin du serveur Web Apache httpd. C'est le plus populaire des serveurs Web du marché et c'est à la fois l'un des plus stables et des plus puissants.

Pour écrire ce tutoriel, j'ai utilisé la version 2.2 compilée avec VC6, disponible sur le site officiel : httpd.apache.org. Prenez la version « Win32 Binary including OpenSSL ».

Vous aurez également besoin de la version 2.2 compilée avec VC9, disponible sur Apache Lounge.

Ces fichiers binaires sont compilés avec le flag Thread Safety, pour une architecture x86 et sans les informations de Debug.

I-E-2 - PHP

Nous utiliserons plusieurs versions de PHP. À chaque fois, nous téléchargerons la version Zip plutôt que l'assistant d'installation. La raison est simple : l'assistant d'installation n'est pas utile pour installer PHP.

Pour écrire ce tutoriel, j'ai utilisé les versions :

- PHP 5.2 VC6 x86 Thread Safe

- PHP 5.2-latest VC6 x86 Thread Safe

- PHP 5.3 VC9 x86 Thread Safe

- PHP 5.3-latest VC9 x86 Thread Safe

Il est bien entendu possible d'ajouter PHP 6.0 à cette liste, mais le site windows.php.net ne le propose pas en téléchargement à l'heure de l'écriture de ces lignes. Vous le trouverez dans la partie « Snapshots ».

I-E-3 - Sysinternals Junction

Ce logiciel permet de créer des répertoires symboliques, appelés NTFS junction points. Ce sont des liens de répertoires à la mode UNIX. Vous pouvez utiliser le logiciel de votre choix, mais ce tutoriel se contentera de Sysinternals Junction. Il est disponible sur Technet : Junction v1.05 ; placez le fichier junction.exe dans le répertoire de Windows avec la ligne de commande suivante :

copy junction.exe %WINDIR%

Ce logiciel ne fonctionne pas sous toutes les versions de Windows (uniquement Windows 2000 et ultérieurs), et votre disque doit être au format NTFS. Renseignez-vous sur le site indiqué ci-dessus si vous avez le moindre doute.

II - Mise en place du serveur

II-A - Préambule

Dans le cas de PHP comme dans celui d'Apache httpd, nous utiliserons un répertoire externe pour les fichiers de configuration. Nous n'utiliserons pas les emplacements par défaut de ces fichiers : cela facilitera l'installation de mises à jour.

II-B - PHP

Nous allons installer toutes nos versions de PHP sous le répertoire C:\Program Files\PHP.

La procédure est similaire pour toutes les versions, d'autant que nous avons pris la version ZIP (et non EXE) : il s'agit tout simplement de décompresser l'archive dans son répertoire de destination.

Exemple d'arborescence possible :

C:\Program Files\PHP
\php-5.2.6-Win32-VC6-x86
\php-5.2.7-Win32-VC6-x86
\php-5.2.8-Win32-VC6-x86
\php-5.2.9-Win32-VC6-x86
\php-5.2.10-Win32-VC6-x86
\php-5.2.11-Win32-VC6-x86
\php-5.2.latest-Win32-VC6-x86
\php-5.3.0-Win32-VC9-x86
\php-5.3.1-Win32-VC9-x86
\php-5.3.latest-Win32-VC9-x86
\php-6.0.latest-Win32-VC9-x86

Nous avons maintenant plusieurs versions de PHP sur notre disque. Afin de ne pas perdre de temps à reconfigurer tout le fichier php.ini à chaque nouvelle version de PHP, nous avons besoin de mutualiser les fichiers de configuration. Dans la mesure où le fichier php.ini change à chaque branche de PHP, nous aurons besoin d'un répertoire C:\Program Files\PHP\ini et d'un sous répertoire pour chaque branche installée (indépendamment des options de compilation).

Exemple d'arborescence possible :

C:\Program Files\PHP
\ini
\5.2.x
\5.3.x
\6.0.x

Après avoir créé ces répertoires, copions :

- C:\Program Files\PHP\php-5.2.11-Win32-VC6-x86\php.ini-recommended vers C:\Program Files\PHP\ini\5.2.x\php.ini

- C:\Program Files\PHP\php-5.3.1-Win32-VC6-x86\php.ini-development vers C:\Program Files\PHP\ini\5.3.x\php.ini

- C:\Program Files\PHP\php-6.0-Win32-VC9-x86\php.ini-development vers C:\Program Files\PHP\ini\6.0.x\php.ini

Au fur et à mesure des sorties de nouvelles versions, décompresser les nouvelles versions dans des répertoires supplémentaires sans jamais supprimer ce qui est en place. Nous pourrons ainsi facilement revenir à d'anciennes versions. Seuls les répertoires « .latest » sont destinés à être remplacés de temps en temps.

II-C - Apache httpd

II-C-1 - Préparation des répertoires

Nous n'avons besoin que d'une seule version d'Apache httpd. Nous en avons plusieurs exemplaires, car nous avons besoin d'options différentes de compilation, mais nous n'avons en réalité qu'un seul ensemble de directives de configuration. Il est également possible d'installer plusieurs versions différentes d'Apache httpd en extrapolant les instructions de ce tutoriel, mais ce n'est pas l'objectif de cet article. Je n'en parlerai donc pas ici.

Contrairement aux versions antérieures d'Apache httpd, la version 2.2 inclut un utilitaire permettant d'enregistrer manuellement des services Windows. Nous allons l'utiliser pour créer les services qui apparaîtront dans Apache Services Monitor, ce qui facilitera leur démarrage et leur arrêt depuis notre Bureau.

II-C-2 - Installation

Nous allons utiliser l'installeur fourni avec notre httpd-VC6 officiel. Après la fin de cette installation, lancer les commandes suivantes :

cd "C:\Program Files\Apache Software Foundation\Apache2.2\bin"
httpd -k stop -n "Apache2.2"
httpd -k uninstall -n "Apache2.2"
cd "C:\Program Files\Apache Software Foundation"

Il faut alors créer Apache2.2-VC6, puis déplacer Apache2.2\bin ainsi que Apache2.2\modules vers Apache2.2-VC6\*, et enfin dézipper notre httpd-VC9 dans le répertoire C:\Program Files\Apache Software Foundation\Apache2.2-VC9.

À cette étape, nous avons trois répertoires Apache2.2, Apache2.2-VC6 et Apache2.2-VC9 prêts à être configurés avec nos versions de PHP, et Apache Service Monitor n'affiche aucun service disponible.

Avant de configurer les services, il faut mutualiser les répertoires qu'il est possible de mettre en commun.

Supprimer alors les répertoires :

- Apache2.2-VC9\cgi-bin

- Apache2.2-VC9\conf

- Apache2.2-VC9\error

- Apache2.2-VC9\htdocs

- Apache2.2-VC9\icons

- Apache2.2-VC9\logs

- Apache2.2-VC9\manual

En réutilisant la ligne de commandes ouverte plus tôt dans cet article, nous pouvons créer des liens entre les répertoires (NTFS junction points). Cette fonctionnalité, similaire aux « hard links » du monde UNIX, existe depuis Windows 2000, mais uniquement en ligne de commandes.

cd "C:\Program Files\Apache Software Foundation"
md Apache2.2-VC6\cgi-bin
md Apache2.2-VC6\conf
md Apache2.2-VC6\error
md Apache2.2-VC6\htdocs
md Apache2.2-VC6\icons
md Apache2.2-VC6\logs
md Apache2.2-VC6\manual
junction.exe Apache2.2-VC6\cgi-bin Apache2.2\cgi-bin
junction.exe Apache2.2-VC6\conf Apache2.2\conf
junction.exe Apache2.2-VC6\error Apache2.2\error
junction.exe Apache2.2-VC6\htdocs Apache2.2\htdocs
junction.exe Apache2.2-VC6\icons Apache2.2\icons
junction.exe Apache2.2-VC6\logs Apache2.2\logs
junction.exe Apache2.2-VC6\manual Apache2.2\manual
md Apache2.2-VC9\cgi-bin
md Apache2.2-VC9\conf
md Apache2.2-VC9\error
md Apache2.2-VC9\htdocs
md Apache2.2-VC9\icons
md Apache2.2-VC9\logs
md Apache2.2-VC9\manual
junction.exe Apache2.2-VC9\cgi-bin Apache2.2\cgi-bin
junction.exe Apache2.2-VC9\conf Apache2.2\conf
junction.exe Apache2.2-VC9\error Apache2.2\error
junction.exe Apache2.2-VC9\htdocs Apache2.2\htdocs
junction.exe Apache2.2-VC9\icons Apache2.2\icons
junction.exe Apache2.2-VC9\logs Apache2.2\logs
junction.exe Apache2.2-VC9\manual Apache2.2\manual

Dans la mesure où le fichier httpd.conf est influencé par la version de PHP installée, et afin de nous assurer que la même configuration est appliquée à httpd-VC6 et httpd-VC9, nous devons créer un répertoire pour centraliser les fichiers de configuration.

Répertoires et fichiers nécessaires :

C:\Program Files\Apache Software Foundation\Apache2.2
\conf
\httpd.conf

Enfin, il nous faut copier les fichiers PHP-VC6\*.dll vers Apache2.2-VC6\bin et les fichiers PHP-VC9\*.dll Apache2.2-VC9\bin :

copy "C:\Program Files\PHP\php-5.2.11-Win32-VC6-x86\*.dll" "C:\Program Files\Apache Software Foundation\Apache2.2-VC6\bin\"
copy "C:\Program Files\PHP\php-5.3.1-Win32-VC9-x86\*.dll" "C:\Program Files\Apache Software Foundation\Apache2.2-VC9\bin\"

Remplacez tous les fichiers conflictuels.

II-C-3 - Configuration des instances httpd

Chaque instance d'Apache httpd dispose de son propre fichier de configuration. Afin d'éviter les décalages entre les fichiers lorsque nous modifions l'un des fichiers de configuration, nous allons utiliser la directive Include pour segmenter le fichier httpd.conf.

Faire deux copies head.httpd.conf et foot.httpd.conf du fichier httpd.conf. Ouvrir head.httpd.conf et supprimer tout ce qui est après la ligne « # Supplemental configuration ». Ouvrir foot.httpd.conf et supprimer tout ce qui précède « # Supplemental configuration ».

Créer les fichiers :

C:\Program Files\Apache Software Foundation\Apache2.2\conf\php52.httpd.conf

ServerRoot "C:/Program Files/Apache Software Foundation/Apache2.2-VC6"
Include "C:/Program Files/Apache Software Foundation/Apache2.2/conf/head.httpd.conf"

LoadModule php5_module "C:/Program Files/PHP/php-5.2.11-Win32-VC6-x86/php5apache2_2.dll"
PHPIniDir "C:/Program Files/PHP/ini/5.2.x"
AddHandler application/x-httpd-php .php

Include "C:/Program Files/Apache Software Foundation/Apache2.2/conf/foot.httpd.conf"

C:\Program Files\Apache Software Foundation\Apache2.2\conf\php52latest.httpd.conf

ServerRoot "C:/Program Files/Apache Software Foundation/Apache2.2-VC6"
Include "C:/Program Files/Apache Software Foundation/Apache2.2/conf/head.httpd.conf"

LoadModule php5_module "C:/Program Files/PHP/php-5.2.latest-Win32-VC6-x86/php5apache2_2.dll"
PHPIniDir "C:/Program Files/PHP/ini/5.2.x"
AddHandler application/x-httpd-php .php

Include "C:/Program Files/Apache Software Foundation/Apache2.2/conf/foot.httpd.conf"

C:\Program Files\Apache Software Foundation\Apache2.2\conf\php53.httpd.conf

ServerRoot "C:/Program Files/Apache Software Foundation/Apache2.2-VC9"
Include "C:/Program Files/Apache Software Foundation/Apache2.2/conf/head.httpd.conf"

LoadModule php5_module "C:/Program Files/PHP/php-5.3.1-Win32-VC9-x86/php5apache2_2.dll"
PHPIniDir "C:/Program Files/PHP/ini/5.3.x"
AddHandler application/x-httpd-php .php

Include "C:/Program Files/Apache Software Foundation/Apache2.2/conf/foot.httpd.conf"

C:\Program Files\Apache Software Foundation\Apache2.2\conf\php53latest.httpd.conf

ServerRoot "C:/Program Files/Apache Software Foundation/Apache2.2-VC9"
Include "C:/Program Files/Apache Software Foundation/Apache2.2/conf/head.httpd.conf"

LoadModule php5_module "C:/Program Files/PHP/php-5.3.latest-Win32-VC9-x86/php5apache2_2.dll"
PHPIniDir "C:/Program Files/PHP/ini/5.3.x"
AddHandler application/x-httpd-php .php

Include "C:/Program Files/Apache Software Foundation/Apache2.2/conf/foot.httpd.conf"

C:\Program Files\Apache Software Foundation\Apache2.2\conf\php60.httpd.conf

ServerRoot "C:/Program Files/Apache Software Foundation/Apache2.2-VC9"
Include "C:/Program Files/Apache Software Foundation/Apache2.2/conf/head.httpd.conf"

LoadModule php6_module "C:/Program Files/PHP/php-6.0-win32-VC9-x86-latest/php6apache2_2.dll"
PHPIniDir "C:/Program Files/PHP/ini/6.0.x"
AddHandler application/x-httpd-php .php

Include "C:/Program Files/Apache Software Foundation/Apache2.2/conf/foot.httpd.conf"

Nous obtenons cette liste de fichiers utiles :

- foot.httpd.conf

- head.httpd.conf

- php52.httpd.conf

- php52latest.httpd.conf

- php53.httpd.conf

- php53latest.httpd.conf

- php60.httpd.conf

II-C-4 - Installation des services Windows

Il nous reste à installer les services dans la console Windows Management et dans Apache Service Monitor. Pour cela, utilisons à nouveau httpd.exe et son paramètre -k. Attention à utiliser httpd.exe compilé avec la bonne version :

Installation des services Apache httpd compilés avec Microsoft Visual C++ 6 :

cd "C:\Program Files\Apache Software Foundation\Apache2.2-VC6\bin"
httpd.exe -k install -n "Apache2.2-PHP5.2-ts-VC6-x86" -f "C:\Program Files\Apache Software Foundation\Apache2.2\conf\php52.httpd.conf"
httpd.exe -k install -n "Apache2.2-PHP5.2.latest-ts-VC6-x86" -f "C:\Program Files\Apache Software Foundation\Apache2.2\conf\php52.httpd.conf"

Installation des services Apache httpd compilés avec Microsoft Visual Studio 9 :

cd "C:\Program Files\Apache Software Foundation\Apache2.2-VC9\bin"
httpd.exe -k install -n "Apache2.2-PHP5.3-ts-VC9-x86" -f "C:\Program Files\Apache Software Foundation\Apache2.2\conf\php53.httpd.conf"
httpd.exe -k install -n "Apache2.2-PHP5.3.latest-ts-VC9-x86" -f "C:\Program Files\Apache Software Foundation\Apache2.2\conf\php53latest.httpd.conf"
httpd.exe -k install -n "Apache2.2-PHP6.0-ts-VC9-x86" -f "C:\Program Files\Apache Software Foundation\Apache2.2\conf\php60.httpd.conf"

Nous aurons besoin de la console d'administration des Services de Windows, accessible depuis « Démarrer / Paramètres / Panneau de Configuration / Outils d'administration / Services ».

Le souci est que tous les services Apache sont configurés pour s'initier au lancement de Windows, ce qui pose un souci, car ils utilisent tous le port numéro 80 pour écouter le réseau. Il nous faut y remédier à l'aide de l'administrateur de Services de Windows dont je vous ai parlé plus haut.

Dans la liste des services, chercher Apache*.

L'objectif ici est simplement de désactiver le lancement automatique de tous les services sauf un, afin qu'il n'y ait pas de conflit. Il faut donc choisir un service qui se lancera par défaut avec Windows, tandis que les autres resteront inactifs jusqu'à ce que nous les appelions par le Moniteur Apache. Double cliquez sur l'un d'eux, changez son type de démarrage à « manuel » et validez. Répétez l'opération autant que nécessaire.

II-C-5 - Note

Vous avez maintenant non seulement plusieurs versions de PHP, mais aussi un moyen simple de tester vos scripts avec l'une ou l'autre de ces versions : il vous suffit d'utiliser le Moniteur Apache disponible dans votre barre des tâches afin de désactiver un serveur puis d'en lancer un autre.

Pour passer d'une version de PHP à une autre, ouvrez votre « Apache Service Monitor » et jonglez avec les services Apache.

L'Apache Service Monitor dans la barre des tâches

L'Apache Service Monitor en grand

III - Maintenance des services configurés

III-A - Installer une version plus récente d'Apache httpd

En premier lieu, abonnez-vous à la liste de diffusion suivante afin d'être averti des nouvelles versions : annonces officielles httpd. Le site ApacheLounge publie ses fichiers (compilés avec Microsoft Visual Studio 9) peu après les annonces de cette liste.

Lors de la sortie d'une nouvelle version d'httpd, il vous faudra l'installer. Le fichier mis à disposition pour Windows par apache.org est un installeur qui remplace l'ancienne version, ce qui nous convient très bien puisque notre fichier httpd.conf est situé dans un répertoire personnalisé : nous n'avons donc aucune crainte de perdre notre configuration.

Pour installer une nouvelle version officielle :

- lancez l'installeur et suivez les instructions ;

- à la fin de l'opération, votre version d'httpd est mise à jour et votre configuration n'a pas changé.

Pour installer une nouvelle version compilée par ApacheLounge, il faut suivre quelques étapes :

1. Arrêter le service depuis Apache Service Monitor ;

2. Remplacer le contenu de l'ancien dossier par le contenu du fichier Zip téléchargé depuis ApacheLounge ;

3. Redémarrer le service depuis Apache Service Monitor.

Il nous faut ensuite reprendre une partie des étapes suivies lors de l'installation initiale des services (cf. chapitre II-C-2).

En fait, toutes les étapes sont à reproduire sauf celles de la création des dossiers et des points de jonction :

- arrêt et suppression du service de base (httpd -k uninstall -n "Apache2.2") s'il a été restauré ;

- suppression des répertoires redondants (conf, error, htdocs etc.) ;

- copie des fichiers *.dll depuis PHP vers le répertoire bin.

III-B - Installer une version plus récente de PHP

En premier lieu, abonnez-vous à la liste de diffusion suivante afin d'être averti des nouvelles versions : annonces officielles PHP. Les versions pour Windows sont disponibles en même temps que ces annonces.

Lors de la sortie d'une nouvelle version de PHP, il vous faudra l'installer. Comme pour l'installation initiale, téléchargez de préférence le format Zip correspondant aux options de compilation de votre httpd (cf. chapitre I-C).

Suivez ensuite les étapes suivantes :

- arrêtez le service depuis Apache Service Monitor ;

- décompressez l'archive téléchargée à côté des autres répertoires de PHP ;

- assurez-vous que le nom du nouveau répertoire suit une logique identique à celle de vos répertoires actuels ;

- modifiez le fichier Apache2.2\conf\php52.httpd.conf pour faire référence au nouveau répertoire ;

- modifiez la directive extension_dir dans le fichier PHP\ini\5.2.x\php.ini pour faire référence au nouveau répertoire ;

- copiez les fichiers *.dll vers le répertoire bin de votre version d'Apache httpd (remplacez les fichiers existants) ;

- redémarrez le service depuis Apache Service Monitor ;

- vérifiez à l'aide de phpinfo() que tout fonctionne correctement.

Pensez à reproduire ces étapes pour toutes les versions d'Apache que vous avez installé.

III-C - Revenir à une version antérieure d'Apache httpd

Commencez par désinstaller Apache httpd depuis le Panneau de configuraton / Ajout et suppression de programmes, puis suivez les instructions du chapitre III-A.

III-D - Revenir à une version antérieure de PHP

Suivez les mêmes étapes que celles décrites au chapitre III-B.

III-E - Que faire si phpinfo() n'affiche pas la bonne version de PHP ?

Vous avez sans doute un conflit de DLL. Copiez tous les fichiers *.dll depuis votre version actuelle de PHP vers le répertoire bin de votre version actuelle d'Apache httpd (remplacez les fichiers existants), puis redémarrez le service à l'aide d'Apache Service Monitor.

IV - Conclusion

IV-A - Épilogue

L'installation manuelle de PHP et Apache httpd peut se faire de manière réellement simple. Il n'est pas nécessaire d'avoir recours à des logiciels comme WAMP ou EasyPHP, d'autant que ce dernier a une fâcheuse tendance à rester plusieurs versions en retard.

Je recommande vivement à tout développeur PHP de mettre en place son environnement de développement manuellement dès qu'il a acquis un peu d'expérience. Cela lui permet d'obtenir ou de confirmer ses connaissances en sécurité, ce qui est indispensable.

IV-B - Liens

Ressources sur Developpez

- Conception détaillée d'hôtes virtuels sous Apache httpd, par Julien Pauli

- Les meilleurs serveurs Web

- Les meilleures solutions tout en un

Ressources externes

- Apache httpd ;

- MySQL ;

- PHP.