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 10 notes

up
2
williamhong at 163 dot com
11 months ago
CgiModule may be better than FastCgiModule in development because CGI processes are not cached.
up
2
m dot benett at gmail dot com
9 months ago
In CGI and FastCGI settings in php.ini exaple, add:
extension_dir = 'ext'
up
2
Aditya
6 months 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
1
brrg58 at yahoo dot com
1 month ago
Following the installation steps second line of Example #3 resulted in an error:

ERROR ( message:Cannot find SITE object with identifier "path='*.php',verb='*',modules='FastCgiModule',scriptProcessor='(path-to-PHP)\php-cgi.exe',resourceType='Either']". )

Apparently there is an extra space before the ,path='*.php' that must be removed.
Thanks
up
0
daniel at kaliel dot net
9 days ago
I ran into the Error 500 with PHP 5.5 and Server 2008 R2 x64.  The issue was that I installed the 64-bit version of Visual C++ Redistributable 2012 and not the 32-bit version.
up
0
B-Edge (MS certified Trainer)
16 days ago
Excellent notes the last comment about adding the environment variables works as previously stated for both examples. I had to figure it out before reading these comments...

and yes the correct format would be

%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']"

and for the second one

%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/FastCGI  ^ /+"[fullPath='c:\PHP\php-cgi.exe'].environmentVariables.[name='PHPRC',value='c:\PHP\']"

hope this helped!
up
0
NG
1 year 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
up
-1
stpetersn at hotmail dot com
1 year ago
For setting the time out above it took me forever to figure out the right combination for double and single quotes (and no quotes) given I had spaces in the absolute path to my php-cgi.exe file. Here is what worked in case you have/had the same problem:
%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/fastCgi ^
/[fullPath="'C:\Program Files (x86)\PHP\php-cgi.exe'"].activityTimeout:90 /commit:apphost

%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/fastCgi ^
/[fullPath="'C:\Program Files (x86)\PHP\php-cgi.exe'"].requestTimeout:90  /commit:apphost
up
-2
Bradford Plummer
8 months 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
-3
mfuhrman at enetarch dot net
1 year ago
When installing PHP in Windows 2008 Server R2, you might find that Windows IIS 7 returns error code 500 when executing scripts.  To resolve this do two things:

1) browse to the folder that contains the script with the error using CMD.  Yes, this is the command prompt.

Then execute the script using something like: "C:\Program Files\PHP\PHP5.4\php.exe" [script-filename].php

Note that the quotes ("") are needed for file paths with spaces.

This will return the results of the script and any errors you might have.

2) To have IIS 7 return the errors to your webbrowser, turn off error logging and turn on display errors. And to make sure that all the errors are display, set error reporting to ALL.

log_errors = Off
display_errors = On
error_reporting = E_ALL
To Top