 
					Introduction
Pour des raisons diverses et variées, il est souvent nécessaire de disposer en local de plusieurs environnements de développement avec Apache. Par exemple un environnement dédié par version de PHP pour des contextes de migration, un environnement uniquement pour du debug à l’image de l’environnement de production afin de reproduire un incident…
| Environnement | Description | Version de PHP | 
|---|---|---|
| www.sqlpac.dvt | Développement | PHP 7.2 | 
| www.sqlpac.ppd | Préproduction | PHP 7.0 | 
| www.sqlpac.dbg | Debug production | PHP 5.6 | 
La configuration de tels environnements est aisée avec les hôtes virtuels d’Apache 2.2.
Les distributions sont installées sur Windows 10 avec les caractéristiques suivantes :
| Répertoire | Source des binaires | |
|---|---|---|
| Apache 2.2.31 64 bits (OpenSSL) | D:\opt\apache%APACHE_HOME% | apachehaus.com/cgi-bin/download.plx | 
| PHP 5.6 64 bits | D:\opt\scripts\php-5.6 | windows.php.net/download/ | 
| PHP 7.0 64 bits | D:\opt\scripts\php-7.0 | windows.php.net/download/ | 
| PHP 7.2 64 bits | D:\opt\scripts\php-7.2 | windows.php.net/download/ | 
Référencement des domaines virtuels dans le fichier hosts
Afin que les domaines virtuels www.sqlpac.dvt, www.sqlpac.ppd… soient résolus, éditer le
          fichier hosts de la machine Windows pour associer les domaines à l’IP locale 127.0.0.1. Ce fichier est
          dans le répertoire C:\Windows\system32\drivers\etc et il doit être ouvert avec les droits administrateur pour
          pouvoir le mettre à jour. Éditer ce fichier avec précaution, il est sensible pour l’OS.
C:\Windows\system32\drivers\etc\hosts
# localhost name resolution is handled within DNS itself.
#	127.0.0.1       localhost
#	::1             localhost
127.0.0.1	www.sqlpac.dvt
127.0.0.1	www.sqlpac.ppd
127.0.0.1	www.sqlpac.dbgNe pas choisir l’extension .dev, avec Apache,
        cette extension finit en erreur 408 (Timeout).
Une simple commande ping confirme la résolution des domaines virtuels. Il se peut qu’un redémarrage de la machine
        soit nécessaire.
C:\Users\sqlpac> ping www.sqlpac.dvtEnvoi d’une requête 'ping' sur www.sqlpac.dvt [127.0.0.1] avec 32 octets de données : Réponse de 127.0.0.1 : octets=32 temps<1ms TTL=128 Réponse de 127.0.0.1 : octets=32 temps<1ms TTL=128 Statistiques Ping pour 127.0.0.1: Paquets : envoyés = 2, reçus = 2, perdus = 0 (perte 0%), Durée approximative des boucles en millisecondes : Minimum = 0ms, Maximum = 0ms, Moyenne = 0ms Ctrl+C
Configuration des virtual hosts
Dans le répertoire %APACHE_HOME/conf/extra, un fichier de configuration par hôte virtuel est créé : le port 80 est
        indiqué ici (pas de SSL sur le port 443).
%APACHE_HOME/conf/extra/httpd-sqlpac-dvt.conf
<VirtualHost *:80>
    DocumentRoot "D:/www/dev"
    ServerName sqlpac.dvt
    ServerAlias www.sqlpac.dvt
    ErrorLog "logs/www.sqlpac.dvt-error.log"
    CustomLog "logs/www.sqlpac.dvt-access.log" common
</VirtualHost>%APACHE_HOME/conf/extra/httpd-sqlpac-ppd.conf
<VirtualHost *:80>
    DocumentRoot "D:/www/preproduction"
    ServerName sqlpac.ppd
    ServerAlias www.sqlpac.ppd
    ErrorLog "logs/www.sqlpac.ppd-error.log"
    CustomLog "logs/www.sqlpac.ppd-access.log" common
</VirtualHost>%APACHE_HOME/conf/extra/httpd-sqlpac-dbg.conf
<VirtualHost *:80>
    DocumentRoot "D:/www/productiondbg"
    ServerName sqlpac.dbg
    ServerAlias www.sqlpac.dbg
    ErrorLog "logs/www.sqlpac.dbg-error.log"
    CustomLog "logs/www.sqlpac.dbg-access.log" common
</VirtualHost>À cette étape, il est d’ores et déjà possible de définir pour le virtual host 
        les alias, les propriétés et options des répertoires (permissions, FollowSymLinks…), etc. :
%APACHE_HOME/conf/extra/httpd-sqlpac-dbg.conf
<VirtualHost *:80>
        
    DocumentRoot "D:/www/productiondbg"
    ServerName sqlpac.dbg
    ServerAlias www.sqlpac.dbg
    ErrorLog "logs/www.sqlpac.dbg-error.log"
    CustomLog "logs/www.sqlpac.dbg-access.log" common
    
    Alias /articles "D:/www/productiondbg/referentiel/docs"
    
    <Directory "D:/www/productiondbg">
        Options Indexes FollowSymLinks
        Options +ExecCGI
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>
    
</VirtualHost>Pour que le serveur Apache prenne en compte ces nouveaux hôtes virtuels, référencer les fichiers de configuration
        précédemment créés avec l’instruction Include à la fin du fichier de configuration
        global du serveur Apache (%APACHE_HOME%\conf\httpd.conf) :
%APACHE_HOME%\conf\httpd.conf
Include conf/extra/httpd-sqlpac-dvt.conf
Include conf/extra/httpd-sqlpac-ppd.conf
Include conf/extra/httpd-sqlpac-dbg.confRedémarrer le serveur Apache et les virtual hosts sont prêts. Effectuer un simple test avec une page html : http://www.sqlpac.ppd/index.html
Activation du module fcgid d’Apache (fastCGI)
Le module fcgid d’Apache est utilisé ici pour PHP et il se peut que ce module ne soit pas présent dans la distribution Apache 2.2 téléchargée.
Pour vérifier que le module existe, rechercher le fichier mod_fcgid.so dans le répertoire %APACHE_HOME/modules. 
        Si le module n’est pas présent, il peut être téléchargé depuis ApacheHaus (ApacheHaus.com - Mod FCGID for Apache 2.2.x x64).
Il s’agit d’une archive zip avec 2 fichiers à copier dans les répertoires ci-dessous :
| httpd-fcgid.conf | %APACHE_HOME%\conf\extra | 
| mod_fcgid.so | %APACHE_HOME%\modules | 
Le module fcgid est ajouté au serveur Apache en modifiant le fichier de configuration httpd.conf
        avec les directives ci-dessous : 
%APACHE_HOME%\conf\httpd.conf
# AJOUT FCGID
#
LoadModule fcgid_module modules/mod_fcgid.so
Include conf/extra/httpd-fcgid.confCommenter les dernières lignes dans le fichier %APACHE_HOME%/conf/extra/httpd-fcgid.conf car elles définissent une configuration
        globale, ce qui ne sera pas le cas ici, la configuration étant réalisée par virtual host.
%APACHE_HOME%\conf\extra\httpd-fcgid.conf
# Global Config Example
# Comment out next 4 lines to use per-Directory or per-VirtualHost configuration
#  <Files ~ "\.php$">
#    Options ExecCGI
#    AddHandler fcgid-script .php
#    FcgidWrapper "C:/php/php-cgi.exe" .php
#  </Files>Redémarrer le serveur Apache.
Personnalisation de la configuration PHP par hôte virtuel
Chaque hôte virtuel utilise une version de PHP bien précise ici.
| Domaine | Version de PHP | 
|---|---|
| www.sqlpac.dvt | PHP 7.2 | 
| www.sqlpac.ppd | PHP 7.0 | 
| www.sqlpac.dbg | PHP 5.6 | 
Comme pour les hôtes virtuels, un fichier de configuration apache est préparé dans le répertoire
    %APACHE_HOME%\conf\extra pour chaque version de PHP :
%APACHE_HOME%\conf\extra\httpd-sqlpac-php-72.conf (PHP 7.2)
FcgidInitialEnv PHPRC "D:/opt/scripts/php-7.2"
AddHandler fcgid-script .php .inc .html
FcgidWrapper "D:/opt/scripts/php-7.2/php-cgi.exe" .php
FcgidWrapper "D:/opt/scripts/php-7.2/php-cgi.exe" .inc
FcgidWrapper "D:/opt/scripts/php-7.2/php-cgi.exe" .html%APACHE_HOME%\conf\extra\httpd-sqlpac-php-70.conf (PHP 7.0)
FcgidInitialEnv PHPRC "D:/opt/scripts/php-7.0"
AddHandler fcgid-script .php .inc .html
FcgidWrapper "D:/opt/scripts/php-7.0/php-cgi.exe" .php
FcgidWrapper "D:/opt/scripts/php-7.0/php-cgi.exe" .inc
FcgidWrapper "D:/opt/scripts/php-7.0/php-cgi.exe" .html%APACHE_HOME%\conf\extra\httpd-sqlpac-php-56.conf (PHP 5.6)
FcgidInitialEnv PHPRC "D:/opt/scripts/php-5.6"
AddHandler fcgid-script .php .inc .html
FcgidWrapper "D:/opt/scripts/php-5.6/php-cgi.exe" .php
FcgidWrapper "D:/opt/scripts/php-5.6/php-cgi.exe" .inc
FcgidWrapper "D:/opt/scripts/php-5.6/php-cgi.exe" .htmlLes fichiers de configuration pour PHP définissent les directives pour le module FastCGI (Fcgid) : traitement des 
    fichiers *.php, *.inc, *.html avec l’exécutable php-cgi.exe approprié en fonction de la version.
La configuration PHP appropriée est alors attribuée à chaque virtual host avec la directive Include dans le fichier de configuration
    du virtual host.
%APACHE_HOME/conf/extra/httpd-sqlpac-dvt.conf
<VirtualHost *:80>
    Include conf/extra/httpd-sqlpac-php-72.conf
    DocumentRoot "D:/www/productiondbg"
    ...
</VirtualHost>%APACHE_HOME/conf/extra/httpd-sqlpac-ppd.conf
<VirtualHost *:80>
    Include conf/extra/httpd-sqlpac-php-70.conf
    DocumentRoot "D:/www/productiondbg"
    ...
</VirtualHost>%APACHE_HOME/conf/extra/httpd-sqlpac-dbg.conf
<VirtualHost *:80>
    Include conf/extra/httpd-sqlpac-php-56.conf
    DocumentRoot "D:/www/productiondbg"
    ...
</VirtualHost>Redémarrer le serveur Apache et c’est terminé, sauf si des erreurs de syntaxe se sont glissées par ci par là, consulter les fichiers de log d’Apache.
Tests
Créér un fichier phpinfo.html avec le code ci-dessous :
phpinfo.html
<!DOCTYPE html> <html> <head> <title>PHP Info</title> </head> <body> <p>Informations PHP - Script PHP</p><?php phpinfo(); ?></body> </html>
Copier ce fichier dans un répertoire de chaque virtual host, la version de PHP utilisée est confirmée avec la fonction phpinfo.
| http://www.sqlpac.dvt/phpinfo.html | PHP Version 7.2.1 | 
| http://www.sqlpac.ppd/phpinfo.html | PHP Version 7.0.27 | 
| http://www.sqlpac.dbg/phpinfo.html | PHP Version 5.6.33 |