Microsoft IIS 7.0 et suivants

Cette section contient les instructions pour une configuration manuelle d'IIS (Internet Information Services) 7.0 et suivants pour fonctionner avec PHP sous Microsoft Windows Vista SP1, Windows 7, Windows Server 2008 et Windows Server 2008 R2. Pour des instructions de configuration d'IIS 5.1 et IIS 6.0 sous Windows XP et Windows Server 2003, reportez-vous à la documentation sur Microsoft IIS 5.1 et IIS 6.0.

Activation du support FastCGI sous IIS

Le module FastCGI est désactivé par défaut sous IIS. Les étapes pour l'activer diffèrent suivant la version de Windows utilisée.

Pour activer le support FastCGI sous Windows Vista SP1 et Windows 7 :

  1. Dans le menu de démarrage Windows, choisissez "Run:", tapez "optionalfeatures.exe" et cliquez sur "Ok";

  2. Dans la fenêtre "Windows Features", dépliez l'arbre "Internet Information Services", "World Wide Web Services", "Application Development Features", puis, activez la boite à cocher "CGI";

  3. Cliquez sur OK et attendez que l'installation se termine.

Activation du support FastCGI pour IIS7 sous Windows Vista SP1 et Windows 7

Pour activer le support FastCGI sous Windows Server 2008 et Windows Server 2008 R2 :

  1. Dans le menu de démarrage Windows, choisissez "Run:", tapez "CompMgmtLauncher" et cliquez sur "Ok";

  2. Si le rôle "Web Server (IIS)" n'est pas présent dans le nœud "Roles" , ajoutez-le en cliquant sur "Add Roles";

  3. Si le rôle "Web Server (IIS)" est présent, cliquez sur "Add Role Services", puis, activez la boite à cocher "CGI" sous le groupe "Application Development";

  4. Cliquez sur "Next", puis "Install", et attendez la fin de l'installation.

Activation du support FastCGI sous Windows Server 2008 et Windows Server 2008 R2

Configuration d'IIS pour traiter les requêtes PHP

Téléchargez et installez PHP suivant les instructions décrites dans les étapes d'installation manuelle.

Note:

La version PHP non thread-safe est recommandée lors de l'utilisation d'IIS. Les versions non thread-safe sont disponibles sur la page » PHP pour Windows : Binaires et sources.

Configurez les options CGI et FastCGI dans le fichier php.ini comme ceci :

Exemple #1 Options CGI et FastCGI dans le fichier php.ini

fastcgi.impersonate = 1
fastcgi.logging = 0
cgi.fix_pathinfo=1
cgi.force_redirect = 0

Configurez le gestionnaire de mapping IIS pour PHP en utilisant soit l'interface de gestion utilisateurs IIS ou l'outil en ligne de commande.

Utilisation de l'interface de gestion utilisateurs IIS pour créer un gestionnaire de mapping pour PHP

Suivez ces étapes pour créer un gestionnaire de mapping IIS pour PHP dans l'interface de gestion utilisateurs IIS :

  1. Dans le menu démarrer de Windows, choisissez "Run:", tapez "inetmgr" et cliquez sur "Ok";

  2. Dans l'interface de gestion utilisateurs IIS, sélectionnez le nœud correspondant au serveur dans l'arbre "Connections";

  3. Dans la page "Features View", ouvrez la fonctionnalité "Handler Mappings";

    Création d'un gestionnaire de mapping IIS pour PHP : Localisation du gestionnaire de mappings

  4. Dans le panneau "Actions", cliquez sur "Add Module Mapping...";

  5. Dans la fenêtre "Add Module Mapping", entrez ceci :

    • Request path: *.php
    • Module: FastCgiModule
    • Executable: C:\[Path to PHP installation]\php-cgi.exe
    • Name: PHP_via_FastCGI

  6. Cliquez sur le bouton "Request Restrictions", puis, configurez le mappin pour appeler le gestionnaire uniquement si la requête est mappée à un fichier ou un dossier;

  7. Cliquez sur OK sur tous les dialogues pour sauvegarder la configuration.

Création d'un gestionnaire de mapping pour PHP : Ajout d'un gestionnaire de mapping

Utilisation de l'outil en ligne de commande pour créer un gestionnaire de mapping pour PHP

Utilisez la commande suivante pour créer une file de processus IIS FastCGI qui utilisera l'exécutable php-cgi.exe pour traiter les requêtes PHP. Remplacez la valeur du paramètre fullPath avec le chemin absolu vers le fichier php-cgi.exe.

Exemple #2 Création d'une file de processus IIS FastCGI

%windir%\system32\inetsrv\appcmd set config /section:system.webServer/fastCGI ^
/+[fullPath='c:\PHP\php-cgi.exe']

Configurez IIS pour gérer les requêtes PHP spécifiques en exécutant la commande suivante. Remplacez la valeur du paramètre scriptProcessor avec le chemin absolu vers le fichier php-cgi.exe.

Exemple #3 Création d'un gestionnaire de mapping pour les requêtes PHP

%windir%\system32\inetsrv\appcmd set config /section:system.webServer/handlers ^
/+[name='PHP_via_FastCGI', path='*.php',verb='*',modules='FastCgiModule',^
scriptProcessor='c:\PHP\php-cgi.exe',resourceType='Either']

Cette commande crée un gestionnaire de mapping IIS pour les fichiers dont l'extension est *.php, ce qui fera que toutes les URLs qui se terminent par .php seront gérées par le module FastCGI.

Note:

À ce moment, les étapes d'installation et de configuration nécessaires sont terminées. Les instructions qui suivent sont optionnelles mais vivement recommandées afin d'avoir un maximum de fonctionnalités mais aussi de bonnes performances pour PHP sous IIS.

Usurpation d'identité et l'accès au système de fichiers

Il est recommandé d'activer l'usurpation d'identité FastCGI en PHP lors de l'utilisation avec IIS. Ce mode est contrôlé par la directive fastcgi.impersonate du fichier php.ini. Lorsque l'usurpation d'identité est active, PHP effectuera toutes les opérations sur le systèmes de fichiers en se faisant passer pour le compte utilisateur qui a été déterminé par l'authentification IIS. Ceci assure que même si le même processus PHP est partagé sur plusieurs sites Web IIS, les scripts PHP de ces sites Web ne pourront pas accéder aux autres fichiers sachant qu'un compte utilisateur différent est utilisé pour l'authentification IIS de chacun de ces sites.

Par exemple, IIS 7, dans sa configuration par défaut, a d'activer l'authentification anonyme avec le compte utilisateur interne IUSR, utilisé comme identité par défaut. Ceci signifie que, pour qu'IIS puisse exécuter des scripts PHP, il est nécessaire d'avoir une permission en lecture pour le compte utilisateur IUSR sur ces scripts. Si les applications PHP doivent effectuer des opérations en écriture sur certains fichiers ou écrire des fichiers dans des dossiers, alors le compte IUSR doit avoir les bonnes permissions en écriture.

Pour déterminer le compte utilisateur utilisé comme identité anonyme sous IIS 7, utilisez la commande suivante. Remplacez "Default Web Site" avec le nom du site web IIS que vous utilisez. Dans l'élément de configuration XML, regardez l'attribut userName.

Exemple #4 Déterminer le compte utilisé comme identité anonyme sous IIS

%windir%\system32\inetsrv\appcmd.exe list config "Default Web Site" ^
/section:anonymousAuthentication

<system.webServer>
  <security>
    <authentication>
      <anonymousAuthentication enabled="true" userName="IUSR" />
    </authentication>
   </security>
</system.webServer>

Note:

Si l'attribut userName n'est pas présent dans l'élément anonymousAuthentication, ou s'il est vide, alors cela signifie que l'identité de l'application est bien l'identité anonyme pour ce site web.

Pour modifier la configuration sur les permissions de ces fichiers ou ces dossiers, utilisez l'interface de l'explorateur Windows ou la ligne commande icacls.

Exemple #5 Configuration des permissions d'accès aux fichiers

icacls C:\inetpub\wwwroot\upload /grant IUSR:(OI)(CI)(M)

Définir index.php comme document par défaut sous IIS

Les documents par défaut IIS sont utilisés pour les requêtes HTTP qui ne spécifient pas un nom de document. Avec les applications PHP, index.php agit généralement comme document par défaut. Pour ajouter index.php à la liste des documents par défaut d'IIS, utilisez la commande suivante :

Exemple #6 Définir index.php comme document par défaut sous IIS

%windir%\system32\inetsrv\appcmd.exe set config ^
-section:system.webServer/defaultDocument /+"files.[value='index.php']" ^
/commit:apphost

Configuration du recyclage FastCGI et PHP

Configurez l'extension IIS FastCGI pour le recyclage des processus PHP en utilisant la commande ci-dessous. La directive instanceMaxRequests de FastCGI contrôle le nombre de requêtes a traité par un seul processus php-cgi.exe avant l'extinction d'IIS. La variable d'environnement PHP PHP_FCGI_MAX_REQUESTS contrôle le nombre de requêtes qu'un seul processus php-cgi.exe peut gérer avant de ce recycler lui-même. Assurez-vous que la valeur spécifiée pour la directive InstanceMaxRequests FastCGI est inférieure ou égale à la valeur spécifiée pour la directive PHP_FCGI_MAX_REQUESTS.

Exemple #7 Configuration du recyclage FastCGI et PHP

%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/fastCgi ^
/[fullPath='c:\php\php-cgi.exe'].instanceMaxRequests:10000

%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/fastCgi ^
/+"[fullPath='C:\{php_folder}\php-cgi.exe'].environmentVariables.^
[name='PHP_FCGI_MAX_REQUESTS',value='10000']"

Configuration du délai d'expiration FastCGI

Augmentez le délai d'expiration pour l'extension FastCGI s'il y a des applications dont les scripts PHP mettent beaucoup de temps à s'exécuter. Les 2 configurations qui contrôlent les délais d'expiration sont activityTimeout et requestTimeout. Utilisez les commandes ci-dessous pour modifier la configuration du délai d'expiration. Assurez-vous de remplacer la valeur du paramètre fullPath par le chemin absolu vers le fichier php-cgi.exe.

Exemple #8 Configuration du délai d'expiration FastCGI

%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/fastCgi ^
/[fullPath='C:\php\php-cgi.exe',arguments=''].activityTimeout:"90"  /commit:apphost

%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/fastCgi ^
/[fullPath='C:\php\php-cgi.exe',arguments=''].requestTimeout:"90"  /commit:apphost

Modification du dossier contenant le fichier php.ini

PHP recherche le fichier php.ini dans différents endroits et il est possible de modifier ces endroits de recherche du fichier php.ini par défaut en utilisant la variable d'environnement PHPRC. Pour demander à PHP de charger le fichier de configuration depuis un dossier personnalisé, exécutez la commande ci-dessous. Le chemin absolu du dossier contenant le fichier php.ini doit être spécifié sous la variable d'environnement PHPRC.

Exemple #9 Modification du dossier contenant le fichier php.ini

appcmd.exe set config  -section:system.webServer/fastCgi ^
/+"[fullPath='C:\php\php.exe',arguments=''].environmentVariables.^
[name='PHPRC',value='C:\Some\Directory\']" /commit:apphost

add a note add a note

User Contributed Notes 6 notes

up
35
Aditya
11 years ago
To resolve the error "The FastCGI process exited unexpectedly" install the below package:

To fix it I had to install the Visual C++ Redistributable for Visual Studio 2012 Update 3

http://www.microsoft.com/en-us/download/confirmation.aspx?id=30679
up
27
sedativchunk at gmail dot com
9 years ago
This might be an incredibly stupid comment, but I thought I would share anyway. If you want to install PHP on Windows Server in one click without all the hassle above, simply go here to the official IIS website:
http://php.iis.net

Run the install, boom, PHP works on your IIS/Windows server! No command prompt windows, no messing with settings, everything is pre-configured. I followed all the steps on this page and I could not get PHP working for anything. When I was about to give up, I found that link where the official Microsoft installer made it stupidly easy.

Use it, save your time and get back to work faster.
up
2
psch3 at gmx dot net
9 years ago
I want to share the solution to a problem I wasted a couple of hours on:

I have some scripts that run for several minutes, they calculate lots of things. I got an error 500. The reason is not the PHP-time-limit, but the timeout of the IIS-FastCGI-setting. Unfortunately I have the German version, I guess the setting translates to "activity timeout" and "request timeout". Just increase the values.

And a 2nd problem: When one of those scripts was running, the server would refuse to process other "quick" scrips at the same time. So normal users would have to wait MINUTES just because a kind of admin-user is running the long script. There is another setting for FastCGI: max number of instances (again, translated!). The setting was 0, which means that IIS decides automatically. Obviously, that was a bad idea. I set it to 4 and now everything is fine.

I hope that helps someone. It may sound obvious, but coming from an old ISAPI-installation, those problems where rather new to me.
up
4
matteo dot alvazzi at gmail dot com
10 years ago
It's a bit silly, but it's worth writing it down, as there will be a day you'll have to configure php on IIS in a Preproduction via VPN with a really pushing customer and only few minutes available...  and somehow you WILL forget this.

Php.ini by default has the short code set to off, so if you configure everything and test it out with <? phpinfo() ?> you will a blank screen with the code in the source, which can also indicate that there is something wrong in the configuration and that the script doesn't get sent to the php processor. It's not, it's correct! Just test out with <?php phpinfo(); ?> or turn on the short codes!
up
4
Bradford Plummer
11 years ago
If you get an error running the second command in Example 7 try this instead:

%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/fastCgi /+"[fullPath='C:\php\php-cgi.exe'].environmentVariables.[name='PHP_FCGI_MAX_REQUESTS',value='10000']"

Be sure to change the path to the php-cgi.exe file if it is not at C:\php\.

Good luck.
up
4
NG
12 years ago
Example #9 fails unless I change "php.exe" to "php-cgi.exe" as follows:

appcmd.exe set config  -section:system.webServer/fastCgi ^
/+"[fullPath='C:\php\php-cgi.exe',arguments=''].environmentVariables.^
[name='PHPRC',value='C:\PHP\']" /commit:apphost
To Top