I. Introduction

J'ai passé du temps à essayer de compiler PHP sous Windows. J'ai finalement réussi mais cela m'a pris plus de temps que j'aurais aimé. Habituellement, j'utilise les fichiers binaires disponibles sur snaps.php.net mais, dans ce cas, j'essayais de déterminer si un patch proposé résolvait un défaut spécifique à Windows - j'avais donc réellement besoin de compiler PHP. Je voulais surtout utiliser un environnement de développement "gratuit" et, en tant que débutante au sujet de Windows (et utilisatrice de longe date d'*nix), je me suis heurtée à de nombreux petits détails qui m'ont pris du temps à corriger. J'ai décidé de documenter la démarche que j'ai suivie pour compiler PHP, afin que cela serve à d'autres personnes qui souhaiteraient faire la même chose que moi.

Ces instructions sont destinées à couvrir tout ce que vous devez être en mesure de faire, pour povoir compiler PHP sur un système Windows XP. Elles peuvent éventuellement fonctionner sur d'autres systèmes, je n'ai pas vérifié. Aucune connaissance préalable n'est requise, excepté savoir utiliser les fonctions fondamentales (comme mkdir, copy) et savoir utiliser un éditeur (par exemple edit). Aucun logiciel n'est requis, hormis Windows lui-même.

Les instructions ont été testées avec PHP5 et PHP6. La seule différence est que toutes les références à ICU sont ignorées si vous ne compilez pas PHP6.

II. Téléchargement des outils

Avant de commencer à compiler quoi que ce soit, vous devez télécharger un certain nombre d'outils de Microsoft. Cela peut prendre un certain temps, par exemple dans mon cas cela a mis 45 minutes pour installer les outils, alors que j'étais au bureau avec une connexion ethernet rapide. Depuis chez moi, avec ma connexion large bande passante, cla m'a pris 4 heures et demie pour faire la même chose. Je ne recommande pas une connexion modem si vous avez un moyen de l'éviter. Les outils prennent approximativement 500 Mo d'espace disque.

Visual C++ 2005 Express Edition compiler
  • Téléchargez Visual C++ 2005 Express Edition depuis cette page ;
  • Vérifiez que vous avez le bon système d'exploitation et processeur pour pouvoir utiliser le compilateur ;
  • Cliquez sur télécharger puis exécuter, ou bien sauvegardez sur votre disque puis exécutez si vous préférez ;
  • Lisez et acceptez les conditions d'usage et tous les paramètres par défaut ;
  • Le compilateur sera installé ici : C:\Program Files\Microsoft Visual Studio 8\ ;
  • À la fin, il vous sera demandé de vous enregistrer : cela prend 5 minutes et si vous le ne le faites pas, quelque chose vous agacera.
Windows Server 2003 SP1 PLatform SDK
  • Téléchargez le Windows Server 2003 SP1 PLatform SDK depuis cette page ;
  • Il y a trois options, j'ai choisi PSDK-x86.exe car j'utilise un système 32 bits - les deux autres sont les systèmes amd64 et ia64 ;
  • Cliquez sur télécharger puis exécuter, ou bien sauvegardez sur votre disque puis exécutez si vous préférez ;
  • Lisez et acceptez la licence, puis passez les écrans suivants ;
  • Sélectionnez l'installation "typical" ;
  • Le code sera installé dans C:\Program Files\Microsoft Platform SDK\ ;
  • C'est une longue installation - 20 minutes depuis le bureau, 2 heures depuis chez moi.

Il y a une version plus récente de ce SDK, que j'ai trouvée seulement après avoir utilisé la version ci-dessus. La nouvelle version est disponible ici. Je ne l'ai pas essayée, ainsi je ne peux pas dire si cela fonctionne avec ces instructions.

The .NET Framework 2.0 SDK
  • Téléchargez le The .NET Framework 2.0 SDK depuis cette page - attention, cela met quelques minutes à charger et peut laisser votre fenêtre active en arrière plan ;
  • Dans la page options, sélectionnez simplement Tools (Outils) et Debugger, vous n'avez pas besoin des exemples et de la doc ;
  • Choisissez le répertoire par défaut pour l'installation (le même que Visual C++) ;
  • C'est un long téléchargement - 2 heures depuis chez moi.
Un utilitaire pour extraire les fichiers tar :
  • Il existe un certain nombre de ces outils ; j'ai pris celui-ci et tout a fonctionné : j'ai simplement téléchargé et suivi les instructions d'installation.

III. Récupérer PHP et ses pré requis

Tout d'abord, choisissez la structure que vous voulez donner à votre environnement de compilation. J'utilise e:\zoe\BUILDS donc chaque fois que je me réfère à ce répertoire, vous devriez mettre le vôtre à la place.

Il m'a semblé que le plus simple pour extraire des fichiers .zip sous Windows est de les ouvrir avec l'Explorer et de choisir "Extraire tous les fichiers".

À la fin de cette section, la structure de sous répertoires doit ressembler à ceci :

 
Sélectionnez
                |
                |-winbld32
                |
e:\zoe\BUILDS - |-bindlib
                |
                |-icu
                |
                |-php6.0YYYYMMDDHHmm  (or php5.0YYYYMMDDHHmm if you are building PHP5)
                |
  • Placez les Windows build tools dans e:\zoe\BUILDS (win32build.zip) ;
  • Extrayez le fichier ZIP dans e:\zoe\BUILDS\win32build ;
  • Extrayez bindlib dans e:\zoe\BUILDS\bindlib\ ;
  • Récupérez les bibliothèques ICU, extrayez-les dans e:\zoe\BUILDS\icu ;
  • Récupérez PHP - J'ai utilisé le site des snaps et téléchargé le fichier .tar.gz. Je l'ai copié dans mon répertoire e:\zoe\BUILDS et utilisé l'utilitaire tar (étape #1) pour extraire le contenu vers e:\zoe\BUILDS\php6.0-YYYYMMDDHHmm.
Pour ICU, j'ai pris ceci :
Sélectionnez
icu4c-3_6-Win32-msvc7_1.zip  	6.1MB  	Windows (win32 x86 32-bit) Visual Studio.Net 2003 (MSVC 7.1)

IV. Configurer l'environnement de compilation

Avant de pouvoir compiler, un peu de configuration est requise afin de faire en sorte que Visual Studio Express reconnaisse le SDK, et de dire aus outils de compilation où ils peuvent trouver les bibliothèques dont PHP a besoin. Pour référence, flex et bison font partie du répertoire win32build et ICU est dans le répertoire ICU. Bien sûr, si vous compilez PHP5 vous n'aurez pas besoin d'ICU.

Ajouter les chemins d'accès au script vsvars32.bat

Dans le répertoire C:\Program Files\Microsoft Visual Studio 8\Common7\Tools\, éditez vsvars32.bat pour inclure les références au Platform SDK dans PATH, INCLUDE et LIB.

Les lignes concernées dans mon fichier sont :
Sélectionnez
@set PATH=C:\Program Files\Microsoft Visual Studio 8\Common7\IDE;C:\Program Files\Microsoft Visual Studio 8\VC\BIN;C:\Program Files\Microsoft Visual Studio 8\Common7\Tools;C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\bin;C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727;C:\Program Files\Microsoft Visual Studio 8\VC\VCPackages;C:\Program Files\Microsoft Platform SDK\Bin;%PATH%
@set INCLUDE=C:\Program Files\Microsoft Visual Studio 8\VC\INCLUDE;c:\Program Files\Microsoft Platform SDK\Include;%INCLUDE%
@set LIB=C:\Program Files\Microsoft Visual Studio 8\VC\LIB;C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\lib;c:\Program Files\Microsoft Platform SDK\Lib;%LIB%

Renommer winres.h

Dans le répertoire C:\Program Files\Microsoft Platform SDK\Include, copiez WinResrc.h vers winres.h

Changements aux variables d'environnement

Démarrer->Panneau d'administration->Système->Avancé->Variables d'environment
  • Modifier ou ajoutez "PATH" pour ajouter e:\zoe\BUILDS\icu\bin;e:\zoe\BUILDS\win32build\bin
  • Modifiez ou ajoutez "INCLUDE" pour ajouter e:\zoe\BUILDS\icu\include;e:\zoe\BUILDS\win32build\include
  • Modifiez ou ajoutez "LIB" pour ajouter e:\zoe\BUILDS\icu\lib;e:\zoe\BUILDS\win32build\lib

Ces modifications ne prendront pas effet dans les fenêtres qui sont déjà ouvertes, vous devez les fermer puis les ouvrir à nouveau.

V. Enfin - Compiler PHP

Démarrer l'environnement

Démarrer -> Visual C++ 2005 Express Edition -> Visual Studio Tools -> Visual Studio 2005 Command Prompt

Compiler resolv.lib

Dans la fenêtre de Visual Studio :
Sélectionnez
cd e:\zoe\BUILDS\bindlib
vcexpress
File -> Open -> Project/Solution -> bindlib.dsp
  • Vous aurez un avertissement à propos d'une conversion de bindlib.dsp au format actuel : à "Convert and open", sélectionnez "Yes"
Maintenant, allez dans Project->Properties->Configuration properties->C/C++/General
  • Tout en haut, cliquez sur "Configuration manager", choisissez "Release" puis "Win32" comme configuration active ;
  • Dans les répertoires supplémentaires d'Includes (additional Include directories), ajoutez ";c:\Program Files\Microsoft Platform SDK\Include" après le point puis cliquez sur Ok (cela lui dit où trouver winsock.h) ;
  • Enfin : cliquez sur "Build" et sélectionnez "Build bindlib".

Compiler PHP

Dans la fenêtre de Visual Studio :
Sélectionnez
cd e:\zoe\BUILDS\php6.0-200707031830
buildconf
cscript /nologo configure.js "--with-extra-libs=e:\zoe\BUILDS\icu" "--with-extra-includes=e:\zoe\BUILDS\icu\include" "--without-simplexml" "--enable-prefix=e:\php6" "--disable-zlib" "--disable-odbc" "--disable-cgi" "--enable-cli" "--without-iconv" "--without-libxml"
nmake
nmake install

Lancer un test pour s'assurer que la compilation a réussi

Creéz un script avec le contenu suivant :

test.php
Sélectionnez
<?php phpinfo() ?>

Dans la fenêtre de commandes, tapez :

 
Sélectionnez
e:\php6\php.exe test.php

Terminé !

VI. Liens