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

LoadingChargement en cours