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.

Apache 2.4 sous Windows – Configuration de PHP

Dans cet article je vais vous parler des configurations de PHP en module et en FastCGI sous Apache 2.4 sous Windows 7. Cette configuration fonctionne également sous Windows 2008 R2.

La configuration en module utilise moins de ressources mémoire, de ressources CPU et est plus rapide que la configuration FastCGI.
Le gros inconvénient du module est que vous ne pouvez pas avoir plusieurs versions de PHP en même temps sur votre serveur Apache alors que FastCGI offre cette possibilité.

Je ne reviens pas sur l’installation d’Apache, je pars du principe qu’Apache est installé et fonctionnel ( http://localhost affiche It works !).
J’utilise PHP 5.4.8. Je ne parlerai pas de la configuration de PHP (fichier php.ini).
Si le runtime Microsoft 2008 c++ n’est pas installé n’oubliez pas de le faire sinon PHP 5.4 ne fonctionnera pas.

Ma configuration des dossiers est la suivante :

Le dossier d’Apache e:\serveur_web\apache24
Le dossier du site web e:\serveur_web\apache24\htdocs
Le dossier de PHP e:\serveur_web\php

PHP fournit des versions thread safe et non thread safe pour chacune de ses branches (5.2, 5.3 et 5.4).
Pour une configuration en module il faut prendre une version thread safe de PHP.
Pour une configuration FastCGI il faut prendre une version non thread safe de PHP.

PHP en module d’Apache

Pour installer PHP en tant que module d’Apache il faut télécharger à partir du site http://windows.php.net/download le fichier zip VC9 x86 Thread Safe.
Extraire le contenu de ce fichier dans le dossier e:\serveur_web\php.
Dans ce dossier vous remarquerez qu’il existe les fichiers php5apache2_2.dll et php5apache2_3.dll qui permettent dans les versions Apache 2.2 et Apache 2.3 d’utiliser PHP en tant que module.
Il n’existe pas de fichier php5apache2_4.dll pour Apache 2.4.
Pour obtenir php5apache2_4.dll allez sur le site http://www.apachelounge.com/download/ puis télécharger php5apache2_4.dll-php-5.4-win32.zip.
Ouvrir ce fichier, aller dans le répertoire PHP 5.4.8 puis extraire le fichier php5apache2_4.dll dans le dossier e:\serveur_web\php.
Ouvrir le fichier e:\serveur_web\apache24\conf\httpd.conf puis ajouter les lignes suivantes

PHPIniDir "e:/serveur_web/php"
LoadModule php5_module "e:/serveur_web/php/php5apache2_4.dll"
<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch>

Enregistrer le fichier.
Ouvrir une fenêtre de commandes puis exécuter e:\serveur_web\apache24\bin\httpd –t pour vérifier la syntaxe du fichier httpd.conf. Si tout est OK redémarrer le service Apache2.4.
Créer un fichier info.php dans e:\serveur_web\apache24\htdocs contenant < ?php phpinfo() ; ?>
Lancez votre navigateur puis tapez http://localhost/info.php dans la barre d’adresse.
Une page avec toute la configuration PHP doit s’afficher.
En regardant la ligne Server API vous verrez la valeur Apache 2.4 Handler Apache Lounge qui signifie que vous êtes configuré en module.
Regardez également la ligne Loaded Configuration File pour vérifier que le fichier php.ini est bien chargé.

Votre configuration de PHP en module est réussie.

PHP en FastCGI

Pour la configuration en FastCGI il faut récupérer le fichier mod_fcgid-2.3.7-win32.zip sur le site http://www.apachelounge.com/download/
Ouvrez ce zip, aller 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

Aller à la fin du fichier et ajouter les lignes suivantes

FcgidInitialEnv PHPRC "E:\serveur_web\php\"
<FilesMatch \.php$>
AddHandler fcgid-script .php
FcgidWrapper "E:\serveur_web\php\php-cgi.exe" .php
</FilesMatch>

Ces lignes sont le minimum pour faire fonctionner FastCGI pour connaitre toutes les directives de ce module allez sur http://httpd.apache.org/mod_fcgid/mod/mod_fcgid.html
Pour terminer allez dans la section <directory "e:\serveur_web\apache24\htdocs"></directory> vous devez avoir une directive Options, ajouter ExecCGI

Options Indexes FollowSymLinks ExecCGI

Enregistrer le fichier.
Ouvrir une fenêtre de commandes puis exécuter e:\serveur_web\apache24\bin\httpd –t pour vérifier la syntaxe du fichier httpd.conf. Si tout est OK redémarrer le service Apache2.4
Créer un fichier info.php dans e:\serveur_web\apache24\htdocs contenant < ?php phpinfo() ; ?>
Lancez votre navigateur puis tapez http://localhost/info.php dans la barre d’adresse.
Une page avec toute la configuration PHP doit s’afficher.
Cette fois ci en regardant la ligne Server API vous verrez la valeur CGI/FastCGI.

Vous avez réussi votre configuration de PHP en FastCGI.

Pour toutes remarques ou questions n’hésitez pas à laisser un commentaire 🙂

Installation Apache 2.4 / PHP 5.4 / SQL Serveur 2008 R2 Express sous Windows 7 64 bits

Dans cet article, je vais vous expliquer comment mettre en place une architecture Apache 2.4.3, PHP 5.4.7 et SQL Serveur 2008 R2 sur Windows 7 64 bits.
Architecture peut être moins répandue qu’Apache/PHP/MySQL, mais que j’ai déjà rencontré donc j’ai décidé de faire cet article.
Il existe plusieurs configurations possibles pour que PHP fonctionne sous Apache, ici je ferai une configuration en tant que module d’Apache.

Les éléments nécessaires

Regardons d’un peu plus près ce dont nous avons besoin pour mettre en place cette architecture.

Apache

Téléchargez les fichiers httpd-2.4.3-win32.zip et php5apache2_4.dll-php-5.4-win32.zip fournis par le site http://www.apachelounge.com/download.
Un pré-requis obligatoire pour faire fonctionner cette version d’apache est d’installer Visual C++ 2010 SP1 Redistributable Package x86.

PHP

Un pré-requis obligatoire pour faire fonctionner PHP est d’installer Package redistribuable Microsoft Visual C++ 2008 (x86).
Sur le site http://windows.php.net/download/, pour sa branche 5.4 PHP fournit 2 versions, thread safe et non thread safe.
Pour une installation en tant que module d’Apache il faut prendre la version thread safe.
Pour une installation en CGI ou FastCGI, prendre la version non thread safe.

SQL Serveur 2008 R2

Téléchargez SQLEXPRWT_x64_FRA.exe  contenant le moteur SQL 2008 R2 et SQL Server Management Studio.
L’extension permettant à PHP de communiquer avec SQL Serveur 2008 n’est plus incluse dans le package PHP mais fournie par Microsoft. Il faut télécharger le pilote SQLSRV30.exe
Enfin, dernier élément à récupérer, le Microsoft® SQL Server® 2012 Native Client 64 bits. Le fichier a télécharger se trouve vers le milieu de page, allez jusqu’à la rubrique COMPOSANTS DE MICROSOFT SQL SERVER CONNECTIVITY FEATURE PACK.

Nous avons tous les éléments nécessaires pour mettre en place notre architecture.
Voici la structure de dossiers que je vais utiliser pour cette installation, vous pouvez bien évidement faire la structure comme bon vous semble.
E:\serveur_web\Apache24 -> contient les fichiers du serveur Apache
E:\serveur_web\php -> contient les fichiers de PHP
E:\serveur_web\mssql -> dossier d’installation de SQL Serveur 2008 R2 Express.

L’installation

Apache 2.4.3

Si nécessaire, installez Visual C++ 2010 SP1 Redistributable Package x86.
Extraire le dossier Apache24 contenu dans httpd-2.4.3-win32.zip vers le dossier e:\serveur_web.
Modifier le fichier e:\serveur_web\Apache24\conf\httpd.conf
Recherchez ServerRoot et mettre ServerRoot "e:\serveur_web\Apache24"
Recherchez DocumentRoot et mettre DocumentRoot "e:\serveur_web\Apache24\htdocs"
Recherchez <Directory> et mettre <Directory "e:\serveur_web\Apache24\htdocs">
Recherchez ServerName et mettre ServerName 127.0.0.1:80
Enregistrer le fichier.
Lancez une invite de commandes exécuter en tant qu’administrateur.
Saisir e:\serveur_web\Apache24\bin\httpd –t pour vérifier la syntaxe du fichier httpd.conf.
Si tout est OK saisir e:\serveur_web\Apache24\bin\httpd –k install pour installer le service Apache.
Saisir la commande sc query apache2.4, si vous obtenez un message de ce type

SERVICE_NAME: apache2.4
TYPE               : 10  WIN32_OWN_PROCESS
STATE              : 1  STOPPED
WIN32_EXIT_CODE    : 0  (0x0)
SERVICE_EXIT_CODE  : 0  (0x0)
CHECKPOINT         : 0x0
WAIT_HINT          : 0x0

c’est que le service est correctement installé.
Il ne reste plus qu’à démarrer le service, saisir sc start apache2.4.
Enfin, depuis votre navigateur préféré allez à l’adresse http://localhost ou http://127.0.0.1, si It works ! apparait alors Apache fonctionne correctement.

PHP 5.4.7 en tant que module d’Apache

Extraire le contenu du fichier php-5.4.7-Win32-VC9-x86.zip dans e:\serveur_web\php.
Renommer php.ini-developpement en php.ini.
Dans php.ini décommenter extension_dir et mettre extension_dir="e:\serveur_web\php\ext"
Extraire de php5apache2_4.dll-php-5.4-win32.zip la dll du répertoire PHP 5.4.7 dans e:\serveur_web\php.
Modifier le fichier httpd.conf en ajoutant les lignes suivantes en fin de fichier

PHPIniDir "e:\serveur_web\php" (ne pas mettre de \ en fin de chemin)
LoadModule php5_module "e:\serveur_web\php\php5apache2_4.dll"
<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch>

et en ajoutant index.php dans DirectoryIndex -> DirectoryIndex index.html index.php
Pour tester le bon fonctionnement de PHP, avec notepad créez un fichier info.php contenant <?php phpinfo(); ?>
Enregistrer ce fichier dans e:\serveur_web\apache24\htdocs
Dans votre navigateur tapez l’adresse http://localhost/info.php, si tout est bien configuré vous devez voir toute la configuration de PHP apparaitre.

SQL Serveur 2008 R2 Express

Exécuter en tant qu’administrateur SQLEXPRWT_x64_FRA.exe.
Le programme d’installation démarre, patientez…
Cliquez sur Nouvelle installation ou ajout de fonctionnalité à une installation existante
Accepter les termes du contrat de licence.
Sélection de fonctionnalités -> il n’y a rien à modifier.
Configuration de l’instance -> vous pouvez donner le nom que vous souhaitez à votre instance, personnellement je conserve le nom proposé SQLExpress et mon répertoire racine de l’instance sera e:\serveur_web\mssql
Configuration du serveur
->  je ne touche à rien.
Configuration du moteur de base de données -> je ne modifie rien, le compte avec lequel est réalisée l’installation sera par défaut administrateur SQL Serveur.
Création de rapports d’erreurs -> je ne modifie rien.
L’installation de SQL Serveur commence… patientez…
Votre serveur SQL Serveur 2008 R2 est installé !

Maintenant démarrons SQL Management Studio (Démarrer > Tous les programmes > Microsoft SQL Server 2008 R2 > SQL Server Management Studio)
Une boite de dialogue Se connecter au serveur s’ouvre.
Dans la zone Nom du serveur saisissez le nom de votre machine.
Pour Authentification laissez Authentification Windows
Cliquez sur le bouton Se conn.
Un message d’erreur peut apparaitre signifiant que SQL Management Studio ne peut pas communiquer avec le moteur de base de données.
Pour résoudre ce problème, il faut lancer le gestionnaire de configuration (Démarrer > Tous les programmes > Microsoft SQL Server 2008 R2 > Outils de configuration > Gestionnaire de configuration SQL Server)
Aller dans Configuration du réseau SQL Server > Protocoles pour SQLEXPRESS
Double cliquez sur TCP/IP et allez sur l’onglet Adresse IP
Allez jusqu’à IPAll et saisir 1433 dans Port TCP
Allez sur l’onglet Protocol et mettre Enabled à Yes
Redémarrer le service SQL Server
Tenter à nouveau une connexion dans SQL Management Server et la connexion doit réussir.

Pilote PHP pour SQL Serveur

Installer Microsoft® SQL Server® 2012 Native Client 64 bits.
Installer SQLSRV30.exe.
Aller dans le dossier d’installation du pilote, ce dossier contient plusieurs fichiers dll et la documentation sur ce pilote.
Copier les fichiers php_sqlsrv_54_ts.dll et php_pdo_sqlsrv_54_ts.dll dans e:\serveur_web\php\ext
Modifier le fichier e:\serveur_web\php\php.ini en ajoutant dans la partie Dynamic Extensions

extension=php_pdo_sqlsrv_54_ts.dll
extension=php_sqlsrv_54_ts.dll

Enregistrer le fichier puis redémarrer le service Apache.
Dans votre navigateur tapez l’adresse http://localhost/info.php, puis faites une recherche sur le mot sqlsrv, vous devez voir pdo_sqlsrv et sqlsrv.

Maintenant vous avez une architecture Apache/PHP/SQL Serveur qui fonctionne, vous n’avez plus qu’à vous lancer dans le développement 🙂

Si vous avez des questions, n’hésitez pas à laisser un commentaire.