Partager via


FastCGI <fastCgi>

Vue d’ensemble

L’élément <fastCgi> contient une collection d’éléments <application>, chacun d’entre eux créant une définition de pool d'applications FastCGI. Internet Information Services (IIS) 7 inclus le composant FastCGI. Ce composant vous offre une plus grande fiabilité et de meilleures performances et vous permet d’exécuter l’infrastructure d’application PHP et d’autres infrastructures d’application web sur IIS 7.

La définition de pool d’applications FastCGI la plus simple nécessite d’inclure l’attribut fullPath dans un élément <application> pour définir les fichiers binaires à utiliser pour l’infrastructure d’application spécifique. Pour l’infrastructure PHP, définissez l’attribut fullPath sur le répertoire et le nom de fichier des fichiers binaires PHP.

D’autres attributs sont facultatifs et vous laissent configurer un certain nombre d’autres paramètres. Ceux-ci incluent le nombre maximal de requêtes qu’un processus de travail FastCGI peut traiter avant d’être recyclé, le nombre maximal de processus de travail pour un pool d'applications et la durée maximale de traitement d’une requête FastCGI.

Remarque

Pour traiter les demandes à l’aide de FastCGI, vous devez d’abord mapper le chemin d’accès et les extensions de nom de fichier spécifiques au module FastCGI et spécifier le processus FastCGI cible en tant que processeur de script.

Nouveautés dans IIS 7.5

IIS 7.5 a ajouté les attributs suivants à l’élément <fastCgi>/<application> :

  • L’attribut monitorChangesTo vous permet de spécifier un fichier permettant de surveiller les modifications susceptibles d’affecter le comportement d’une application FastCGI. Par exemple, si vous utilisez l’infrastructure PHP, vous pouvez configurer IIS pour surveiller le fichier PHP.INI pour les modifications en spécifiant le chemin complet du fichier dans l’attribut monitorChangesTo.
  • L’attribut stderrMode spécifie la façon dont IIS 7 gérera les erreurs renvoyées par une application FastCGI via le flux STDERR.
  • L’attribut signalBeforeTerminateSeconds vous permet de configurer IIS pour attendre une période spécifiée après que IIS signale à une application FastCGI qu’il doit arrêter. Cela permet à une application FastCGI de nettoyer tous les paramètres avant que IIS ne termine le processus.

Compatibilité

Version Notes
IIS 10.0 L’élément <fastCgi> n’a pas été modifié dans IIS 10.0.
IIS 8.5 L’élément <fastCgi> n’a pas été modifié dans IIS 8.5.
IIS 8.0 L’élément <fastCgi> n’a pas été modifié dans IIS 8.0.
IIS 7.5 L’élément <application> de la collection <fastCgi> a été mis à jour dans IIS 7.5 avec les attributs monitorChangesTo, stderrMode et signalBeforeTerminateSeconds.
IIS 7.0 L’élément <fastCgi> a été introduit dans IIS 7.0.
IIS 6.0 S/O

Programme d’installation

Pour utiliser l’environnement FastCGI, vous devez d’abord installer le service de rôle CGI. Le processus d’installation inscrit le service de rôle CGI (Common Gateway Interface) dans les éléments <globalModules> et <modules>. Vous n’avez pas besoin d’effectuer d’autres étapes pour installer l’environnement FastCGI.

Windows Server 2012 ou Windows Server 2012 R2

  1. Dans la barre des tâches, cliquez sur Gestionnaire de serveur.
  2. Dans Gestionnaire de serveur, cliquez sur le menu Gérer, puis sur Ajouter des rôles et des fonctionnalités.
  3. Dans l’Assistant Ajout de rôles et de fonctionnalités, cliquez sur Suivant. Sélectionnez le type d’installation, puis cliquez sur Suivant. Sélectionnez le serveur de destination, puis cliquez sur Suivant.
  4. À la page Rôles de serveur, développez Serveur web (IIS), Serveur web, Développement d’applications, puis sélectionnez CGI. Sélectionnez Suivant.
    Capture d’écran de C G I sélectionnée dans une interface Windows Server 2012.
  5. Dans la page Sélectionner des fonctionnalités, cliquez sur Suivant.
  6. Dans la page Confirmer les sélections d’installation, cliquez sur Installer.
  7. Dans la page Résultats , cliquez sur Fermer.

Windows 8 ou Windows 8.1

  1. Dans l’écran d’accueil, déplacez le pointeur jusqu’au coin inférieur gauche, cliquez avec le bouton droit sur le bouton Démarrer, puis cliquez sur Panneau de configuration.
  2. Dans Panneau de configuration, cliquez sur Programmes et fonctionnalités, puis sur Activer ou désactiver des fonctionnalités Windows.
  3. Développez Internet Information Services, Services World Wide Web, Fonctionnalités de développement d’applications, puis sélectionnez CGI.
    Capture d’écran de C G I sélectionnée dans une interface Windows 8.
  4. Cliquez sur OK.
  5. Cliquez sur Fermer.

Windows Server 2008 ou Windows Server 2008 R2

  1. Dans la barre des tâches, cliquez sur Démarrer, pointez sur Outils d’administration, puis cliquez sur Gestionnaire de serveur.
  2. Dans le volet hiérarchie du Gestionnaire de serveur, développez Rôles, puis cliquez sur Serveur web (IIS).
  3. Dans le volet Serveur web (IIS), faites défiler jusqu’à la section Services de rôle, puis cliquez sur Ajouter des services de rôle.
  4. À la page Sélectionner des services de rôle de l’Assistant Ajout de services de rôle, sélectionnez CGI puis cliquez sur Suivant.
    Capture d’écran de C G I sélectionnée dans une interface Windows Server 2008.
  5. Dans la page Confirmer les sélections pour l'installation, cliquez sur Installer.
  6. Dans la page Résultats , cliquez sur Fermer.

Windows Vista ou Windows 7

  1. Dans la barre des tâches, cliquez sur Démarrer, puis sur Panneau de configuration.
  2. Dans Panneau de configuration, cliquez sur Programmes et fonctionnalités, puis sur Activer ou désactiver des fonctionnalités Windows.
  3. Développez Internet Information Services, sélectionnez CGI, puis cliquez sur OK.
    Capture d’écran de C G J’ai sélectionné dans une interface Windows Vista ou Windows 7.

Procédure

Remarque pour les utilisateurs d’IIS 7.0 : certaines étapes décrites dans cette section peuvent nécessiter l’installation du pack d’administration Microsoft pour IIS 7.0, qui inclut une interface utilisateur pour les paramètres FastCGI. Pour installer le pack d’administration Microsoft pour IIS 7.0, consultez l’URL suivante :

Comment créer un mappage de gestionnaire FastCGI global pour PHP

Remarque

Avant que la procédure suivante fonctionne, vous devez avoir déjà installé des fichiers binaires qui exécutent le chemin d’accès du fichier ou l’extension de nom de fichier que vous spécifiez. Cet exemple utilise une implémentation PHP disponible sur https://www.php.net/.

  1. Ouvrez le Gestionnaire des services Internet (IIS) :

    • Si vous utilisez Windows Server 2012 ou Windows Server 2012 R2 :

      • Dans la barre des tâches, cliquez sur Gestionnaire de serveur, cliquez sur Outils, puis sur Gestionnaire Internet Information Services (IIS).
    • Si vous utilisez Windows 8 ou Windows 8.1 :

      • Maintenez la touche Windows enfoncée, appuyez sur la lettre X, puis cliquez sur Panneau de configuration.
      • Cliquez sur Outils d’administration, puis double-cliquez sur Gestionnaire Internet Information Services (IIS).
    • Si vous utilisez Windows Server 2008 ou Windows Server 2008 R2 :

      • Cliquez sur Démarrer, placez le curseur sur Outils d’administration, puis cliquez sur Gestionnaire Internet Information Services (IIS).
    • Si vous utilisez Windows Vista ou Windows 7 :

      • Dans la barre des tâches, cliquez sur Démarrer, puis sur Panneau de configuration.
      • Double-cliquez sur Outils d’administration, puis double-cliquez sur Gestionnaire Internet Information Services (IIS).
  2. Dans le volet Connexions, cliquez sur le nom du serveur pour lequel vous souhaitez configurer les mappages de gestionnaires FastCGI.

  3. Dans le volet Accueil, double-cliquez sur Mappages de gestionnaires.
    Capture d’écran des mappages de gestionnaires sélectionnés dans le volet d’accueil du site web par défaut.

  4. Dans le volet Actions , cliquez sur Ajouter un mappage de modules. Capture d’écran des mappages de gestionnaires désactivés et activés dans le gestionnaire I S.

  5. Saisissez les informations suivantes :

    • Entrez l’extension de nom de fichier dans la zone de texte Chemin de requête. Par exemple, « *.php ».

    • Cliquez sur FastCgiModule dans la liste déroulante Module.

    • Entrez le chemin d’accès au moteur de script dans la zone Exécutable. Par exemple, « C:\PHP\php-cgi.exe ».

    • Entrez un nom unique pour le mappage de gestionnaire dans la zone Nom. Par exemple, « PHP-FastCGI ».

      Capture d’écran de la boîte de dialogue Ajouter un mappage de module avec les options spécifiées.

    • Cliquez sur Restrictions des demandes.

    • Sélectionnez Appeler le gestionnaire uniquement si la demande est mappée.

    • Cliquez pour sélectionner l’option Fichier ou Dossier.

    • Cliquez sur OK.

      Capture d’écran de la définition des options de mappage dans la boîte de dialogue Restrictions de demande.

  6. Cliquez sur OK.

  7. Si vous êtes invité à créer une application FastCGI dans la boîte de dialogue Ajouter un mappage de module, cliquez sur Oui.

    Capture d’écran avant de confirmer la création d’une application pour l’exécutable spécifié.

    Remarque

    Cela crée automatiquement une application FastCGI pour le mappage de gestionnaire que vous venez de créer. Si vous choisissez Non, vous pouvez créer manuellement une application FastCGI ultérieurement.

Comment créer une application FastCGI pour PHP

Remarque

Avant que la procédure suivante fonctionne, vous devez avoir déjà installé des fichiers binaires qui exécutent le chemin d’accès du fichier ou l’extension de nom de fichier que vous spécifiez. Cet exemple utilise une implémentation PHP disponible sur www.php.net.

Remarque

L’ajout d’une application FastCGI n’ajoute pas automatiquement un mappage de gestionnaire. Pour ce faire, vous devez suivre les étapes décrites dans la section Procédure de création d’un mappage de gestionnaire FastCGI pour PHP de cet article.

  1. Ouvrez le Gestionnaire des services Internet (IIS) :

    • Si vous utilisez Windows Server 2012 ou Windows Server 2012 R2 :

      • Dans la barre des tâches, cliquez sur Gestionnaire de serveur, cliquez sur Outils, puis sur Gestionnaire Internet Information Services (IIS).
    • Si vous utilisez Windows 8 ou Windows 8.1 :

      • Maintenez la touche Windows enfoncée, appuyez sur la lettre X, puis cliquez sur Panneau de configuration.
      • Cliquez sur Outils d’administration, puis double-cliquez sur Gestionnaire Internet Information Services (IIS).
    • Si vous utilisez Windows Server 2008 ou Windows Server 2008 R2 :

      • Cliquez sur Démarrer, placez le curseur sur Outils d’administration, puis cliquez sur Gestionnaire Internet Information Services (IIS).
    • Si vous utilisez Windows Vista ou Windows 7 :

      • Dans la barre des tâches, cliquez sur Démarrer, puis sur Panneau de configuration.
      • Double-cliquez sur Outils d’administration, puis double-cliquez sur Gestionnaire Internet Information Services (IIS).
  2. Dans le volet Connexions, cliquez sur le nom du serveur pour lequel vous souhaitez configurer les paramètres FastCGI.

  3. Dans le volet Accueil, double-cliquez sur Paramètres FastCGI.
    Capture d’écran de Fast C G I Paramètres sélectionné dans le volet Accueil DU SERVEUR.

  4. Dans le volet Actions, cliquez sur Ajouter un pool d’applications
    Capture d’écran d’un volet fast C G Paramètres vide.

  5. Dans la boîte de dialogue Ajouter une application FastCGI, entrez les informations suivantes :

    • Entrez le chemin d’accès au moteur de script dans la zone Chemin d’accès complet. Par exemple, « C:\PHP\php-cgi.exe ».

    • Entrez le nombre maximal de requêtes pour l’application FastCGI.

      Remarque

      Pour PHP, ce nombre doit être inférieur ou égal au nombre maximal de requêtes pour l’environnement PHP, qui est configuré à l’aide de la variable d’environnement PHP_FCGI_MAX_REQUESTS.
      Capture d’écran de la boîte de dialogue Ajouter une application Fast C G I avec les propriétés Fast C G I par défaut.

  6. Cliquez sur les points de suspension () en regard de EnvironmentVariables pour ouvrir l’éditeur de collections de variables d’environnement.

  7. Dans la boîte de dialogue Éditeur de collections EnvironmentVariables, cliquez sur Ajouter.
    Capture d’écran d’une boîte de dialogue Éditeur de collection variables d’environnement vide.

  8. Entrez les informations suivantes, puis cliquez sur OK.

    • Entrez « PHP_FCGI_MAX_REQUESTS » pour le nom.

    • Entrez « 10000 » pour la valeur.

      Capture d’écran de la nouvelle variable dans la liste Membres avec les propriétés spécifiées.

  9. Cliquez sur OK pour fermer la boîte de dialogue Ajouter une application FastCGI.

Ajout d’une variable d’environnement FastCGI pour PHP

Remarque

Avant que la procédure suivante fonctionne, vous devez avoir déjà installé des fichiers binaires qui exécutent le chemin d’accès du fichier ou l’extension de nom de fichier que vous spécifiez. Cet exemple utilise une implémentation PHP disponible sur https://www.php.net/.

  1. Ouvrez le Gestionnaire des services Internet (IIS) :

    • Si vous utilisez Windows Server 2012 ou Windows Server 2012 R2 :

      • Dans la barre des tâches, cliquez sur Gestionnaire de serveur, cliquez sur Outils, puis sur Gestionnaire Internet Information Services (IIS).
    • Si vous utilisez Windows 8 ou Windows 8.1 :

      • Maintenez la touche Windows enfoncée, appuyez sur la lettre X, puis cliquez sur Panneau de configuration.
      • Cliquez sur Outils d’administration, puis double-cliquez sur Gestionnaire Internet Information Services (IIS).
    • Si vous utilisez Windows Server 2008 ou Windows Server 2008 R2 :

      • Cliquez sur Démarrer, placez le curseur sur Outils d’administration, puis cliquez sur Gestionnaire Internet Information Services (IIS).
    • Si vous utilisez Windows Vista ou Windows 7 :

      • Dans la barre des tâches, cliquez sur Démarrer, puis sur Panneau de configuration.
      • Double-cliquez sur Outils d’administration, puis double-cliquez sur Gestionnaire Internet Information Services (IIS).
  2. Dans le volet Connexions, cliquez sur le nom du serveur pour lequel vous souhaitez configurer les paramètres FastCGI.

  3. Dans le volet Accueil, double-cliquez sur Paramètres FastCGI.
    Capture d’écran de l’icône Fast C G I Paramètres sélectionnée dans le volet Accueil DU SERVEUR.

  4. Mettez en surbrillance l’application PHP dans le volet Paramètres FastCGI, puis cliquez sur Modifier dans le volet Actions
    Capture d’écran de l’application P H P sélectionnée dans le volet Paramètres Fast C G.

  5. Dans la boîte de dialogue Modifier l’application FastCGI, cliquez sur les points de suspension () en regard de EnvironmentVariables pour ouvrir l’éditeur de collections des variables d’environnement.
    Capture d’écran de la boîte de dialogue Modifier l’application Fast C G I avec les options spécifiées.

  6. Dans la boîte de dialogue Éditeur de collections EnvironmentVariables, cliquez sur Ajouter.
    Capture d’écran d’une boîte de dialogue Éditeur de collection variables d’environnement vide avant d’ajouter une nouvelle variable.

  7. Entrez les informations suivantes, puis cliquez sur OK.

    • Entrez « PHP_FCGI_MAX_REQUESTS » pour le nom.

    • Entrez « 10000 » pour la valeur.

      Capture d’écran après l’ajout de la nouvelle variable d’environnement avec les propriétés spécifiées.

  8. Cliquez sur OK pour fermer la boîte de dialogue Ajouter une application FastCGI.

Configuration

Vous pouvez configurer l’élément <fastCgi> au niveau du serveur dans le fichier ApplicationHost.config ou bien au niveau du site, au niveau de l’application ou au niveau du répertoire dans le fichier Web.config.

Attributs

Aucune.

Éléments enfants

Élément Description
application Élément facultatif.

Ajouter une définition du pool de processus FastCGI à la collection de définitions de pool de processus FastCGI.

Exemple Configuration

L’exemple de configuration suivant ajoute une application FastCGI pour PHP, définit l’attribut instanceMaxRequests sur « 10000 », et définit la variable d’environnement PHP_FCGI_MAX_REQUESTS sur « 10000 ».

<fastCgi>
   <application fullPath="C:\PHP\php-cgi.exe"
         arguments=""
         maxInstances="4"
         idleTimeout="300"
         activityTimeout="30"
         requestTimeout="90"
         instanceMaxRequests="10000"
         protocol="NamedPipe"
         flushNamedPipe="false">
      <environmentVariables>
         <environmentVariable
            name="PHP_FCGI_MAX_REQUESTS"
            value="10000" />
      </environmentVariables>
   </application>
</fastCgi>

Remarque

Pour PHP, la valeur de la variable d’environnement PHP_FCGI_MAX_REQUESTS doit être un nombre inférieur ou égal à la valeur spécifiée par l’attribut instanceMaxRequests de l’élément FastCGI <application>.

L’exemple de configuration suivant ajoute un mappage de gestionnaire FastCGI global pour les fichiers PHP à IIS et spécifie le chemin d’accès complet d’un fichier exécutable FastCGI.

<configuration>
   <location path="" overrideMode="Allow">
      <system.webServer>
         <handlers>
            <add name="PHP-FastCGI"
                path="*.php"
                verb="GET,HEAD,POST"
                modules="FastCgiModule"
                scriptProcessor="C:\PHP\php-cgi.exe"
                resourceType="Either"
                requireAccess="Script" />
         </handlers>
      </system.webServer>
   </location>
</configuration>

Remarque

Les paramètres FastCGI peuvent être configurés par site à l’aide d’une application FastCGI spécialement mise en forme et par des mappages de gestionnaires, qui se distinguent en faisant correspondre les attributs fullPath et arguments d’un élément <application> avec l’attribut scriptProcessor correspondant dans le mappage <handlers> pour le processus FastCGI. Pour créer ces mappages, les paramètres des attributs fullPath et arguments d’un élément <application> doivent être ajoutés à l’attribut scriptProcessor dans le mappage <handlers> du processus FastCGI et séparés par le caractère « | » du canal. Cette combinaison sert de clé unique pour chaque application FastCGI. Par exemple, l’extrait de configuration suivant montre deux exemples d’éléments <fastCgi >/<application> et leurs mappages de <gestionnaires> correspondants pour deux gestionnaires PHP spécifiques au site :

<fastCgi>
   <application fullPath="C:\PHP\php-cgi.exe"
      arguments="-d open_basedir=C:\Websites\Website1" />
   <application fullPath="C:\PHP\php-cgi.exe"
      arguments="-d open_basedir=C:\Websites\Website2" />
</fastCgi>

<system.webServer>
   <handlers accessPolicy="Read, Script"> 
      <add name="PHP via FastCGI 1"
         path="*.php"
         verb="*"
         modules="FastCgiModule"
         scriptProcessor="C:\PHP\php-cgi.exe|-d open_basedir=C:\Websites\Website1"
         resourceType="Unspecified"
         requireAccess="Script" />
      <add name="PHP via FastCGI 2"
         path="*.php"
         verb="*"
         modules="FastCgiModule"
         scriptProcessor="C:\PHP\php-cgi.exe|-d open_basedir=C:\Websites\Website2"
         resourceType="Unspecified"
         requireAccess="Script" />
</handlers>
</system.webServer>

Exemple de code

Les exemples de code suivants ajoutent une application FastCGI pour PHP, définissent l’attribut instanceMaxRequests sur « 10000 », puis définissent la variable d’environnement PHP_FCGI_MAX_REQUESTS sur « 10000 ». Chaque exemple ajoute également un mappage de gestionnaire FastCGI global pour les fichiers PHP à IIS et spécifie le chemin complet d’un fichier exécutable FastCGI.

AppCmd.exe

appcmd.exe set config -section:system.webServer/fastCgi /+"[fullPath='C:\PHP\php-cgi.exe',arguments='',maxInstances='4',idleTimeout='300',activityTimeout='30',requestTimeout='90',instanceMaxRequests='10000',protocol='NamedPipe',flushNamedPipe='False']" /commit:apphost

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

appcmd.exe set config -section:system.webServer/handlers /+"[name='PHP-FastCGI',path='*.php',verb='GET,HEAD,POST',modules='FastCgiModule',scriptProcessor='C:\PHP\php-cgi.exe',resourceType='Either',requireAccess='Script']" /commit:apphost

Remarque

Vous devez veiller à définir le paramètre commit sur apphost quand vous utilisez AppCmd.exe pour configurer ces paramètres. Cela valide les paramètres de configuration dans la section d’emplacement appropriée dans le fichier ApplicationHost.config.

C#

using System;
using System.Text;
using Microsoft.Web.Administration;

internal static class Sample
{
   private static void Main()
   {
      using (ServerManager serverManager = new ServerManager())
      {
         Configuration config = serverManager.GetApplicationHostConfiguration();

         ConfigurationSection fastCgiSection = config.GetSection("system.webServer/fastCgi");
         ConfigurationElementCollection fastCgiCollection = fastCgiSection.GetCollection();
         ConfigurationElement applicationElement = fastCgiCollection.CreateElement("application");
         applicationElement["fullPath"] = @"C:\PHP\php-cgi.exe";
         applicationElement["arguments"] = @"";
         applicationElement["maxInstances"] = 4;
         applicationElement["idleTimeout"] = 300;
         applicationElement["activityTimeout"] = 30;
         applicationElement["requestTimeout"] = 90;
         applicationElement["instanceMaxRequests"] = 10000;
         applicationElement["protocol"] = @"NamedPipe";
         applicationElement["flushNamedPipe"] = false;

         ConfigurationElementCollection environmentVariablesCollection = applicationElement.GetCollection("environmentVariables");
         ConfigurationElement environmentVariableElement = environmentVariablesCollection.CreateElement("environmentVariable");
         environmentVariableElement["name"] = @"PHP_FCGI_MAX_REQUESTS";
         environmentVariableElement["value"] = @"10000";
         environmentVariablesCollection.Add(environmentVariableElement);
         fastCgiCollection.Add(applicationElement);

         ConfigurationSection handlersSection = config.GetSection("system.webServer/handlers");
         ConfigurationElementCollection handlersCollection = handlersSection.GetCollection();
         ConfigurationElement addElement = handlersCollection.CreateElement("add");
         addElement["name"] = @"PHP-FastCGI";
         addElement["path"] = @"*.php";
         addElement["verb"] = @"GET,HEAD,POST";
         addElement["modules"] = @"FastCgiModule";
         addElement["scriptProcessor"] = @"C:\PHP\php-cgi.exe";
         addElement["resourceType"] = @"Either";
         addElement["requireAccess"] = @"Script";
         handlersCollection.AddAt(0, addElement);

         serverManager.CommitChanges();
      }
   }
}

VB.NET

Imports System
Imports System.Text
Imports Microsoft.Web.Administration

Module Sample

   Sub Main()
      Dim serverManager As ServerManager = New ServerManager
      Dim config As Configuration = serverManager.GetApplicationHostConfiguration

      Dim fastCgiSection As ConfigurationSection = config.GetSection("system.webServer/fastCgi")
      Dim fastCgiCollection As ConfigurationElementCollection = fastCgiSection.GetCollection
      Dim applicationElement As ConfigurationElement = fastCgiCollection.CreateElement("application")
      applicationElement("fullPath") = "C:\PHP\php-cgi.exe"
      applicationElement("arguments") = ""
      applicationElement("maxInstances") = 4
      applicationElement("idleTimeout") = 300
      applicationElement("activityTimeout") = 30
      applicationElement("requestTimeout") = 90
      applicationElement("instanceMaxRequests") = 10000
      applicationElement("protocol") = "NamedPipe"
      applicationElement("flushNamedPipe") = False

      Dim environmentVariablesCollection As ConfigurationElementCollection = applicationElement.GetCollection("environmentVariables")
      Dim environmentVariableElement As ConfigurationElement = environmentVariablesCollection.CreateElement("environmentVariable")
      environmentVariableElement("name") = "PHP_FCGI_MAX_REQUESTS"
      environmentVariableElement("value") = "10000"
      environmentVariablesCollection.Add(environmentVariableElement)
      fastCgiCollection.Add(applicationElement)

      Dim handlersSection As ConfigurationSection = config.GetSection("system.webServer/handlers")
      Dim handlersCollection As ConfigurationElementCollection = handlersSection.GetCollection
      Dim addElement As ConfigurationElement = handlersCollection.CreateElement("add")
      addElement("name") = "PHP-FastCGI"
      addElement("path") = "*.php"
      addElement("verb") = "GET,HEAD,POST"
      addElement("modules") = "FastCgiModule"
      addElement("scriptProcessor") = "C:\PHP\php-cgi.exe"
      addElement("resourceType") = "Either"
      addElement("requireAccess") = "Script"
      handlersCollection.AddAt(0, addElement)

      serverManager.CommitChanges()
   End Sub

End Module

JavaScript

var adminManager = new ActiveXObject('Microsoft.ApplicationHost.WritableAdminManager');
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST";

var fastCgiSection = adminManager.GetAdminSection("system.webServer/fastCgi", "MACHINE/WEBROOT/APPHOST");
var fastCgiCollection = fastCgiSection.Collection;
var applicationElement = fastCgiCollection.CreateNewElement("application");
applicationElement.Properties.Item("fullPath").Value = "C:\\PHP\\php-cgi.exe";
applicationElement.Properties.Item("arguments").Value = "";
applicationElement.Properties.Item("maxInstances").Value = 4;
applicationElement.Properties.Item("idleTimeout").Value = 300;
applicationElement.Properties.Item("activityTimeout").Value = 30;
applicationElement.Properties.Item("requestTimeout").Value = 90;
applicationElement.Properties.Item("instanceMaxRequests").Value = 10000;
applicationElement.Properties.Item("protocol").Value = "NamedPipe";
applicationElement.Properties.Item("queueLength").Value = 1000;
applicationElement.Properties.Item("flushNamedPipe").Value = false;
applicationElement.Properties.Item("rapidFailsPerMinute").Value = 10;

var environmentVariablesCollection = applicationElement.ChildElements.Item("environmentVariables").Collection;
var environmentVariableElement = environmentVariablesCollection.CreateNewElement("environmentVariable");
environmentVariableElement.Properties.Item("name").Value = "PHP_FCGI_MAX_REQUESTS";
environmentVariableElement.Properties.Item("value").Value = "10000";
environmentVariablesCollection.AddElement(environmentVariableElement);
fastCgiCollection.AddElement(applicationElement);

var handlersSection = adminManager.GetAdminSection("system.webServer/handlers", "MACHINE/WEBROOT/APPHOST");
var handlersCollection = handlersSection.Collection;
var addElement = handlersCollection.CreateNewElement("add");
addElement.Properties.Item("name").Value = "PHP-FastCGI";
addElement.Properties.Item("path").Value = "*.php";
addElement.Properties.Item("verb").Value = "GET,HEAD,POST";
addElement.Properties.Item("modules").Value = "FastCgiModule";
addElement.Properties.Item("scriptProcessor").Value = "C:\\PHP\\php-cgi.exe";
addElement.Properties.Item("resourceType").Value = "Either";
addElement.Properties.Item("requireAccess").Value = "Script";
handlersCollection.AddElement(addElement, 0);

adminManager.CommitChanges();

VBScript

Set adminManager = WScript.CreateObject("Microsoft.ApplicationHost.WritableAdminManager")
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST"

Set fastCgiSection = adminManager.GetAdminSection("system.webServer/fastCgi", "MACHINE/WEBROOT/APPHOST")
Set fastCgiCollection = fastCgiSection.Collection
Set applicationElement = fastCgiCollection.CreateNewElement("application")
applicationElement.Properties.Item("fullPath").Value = "C:\PHP\php-cgi.exe"
applicationElement.Properties.Item("arguments").Value = ""
applicationElement.Properties.Item("maxInstances").Value = 4
applicationElement.Properties.Item("idleTimeout").Value = 300
applicationElement.Properties.Item("activityTimeout").Value = 30
applicationElement.Properties.Item("requestTimeout").Value = 90
applicationElement.Properties.Item("instanceMaxRequests").Value = 10000
applicationElement.Properties.Item("protocol").Value = "NamedPipe"
applicationElement.Properties.Item("queueLength").Value = 1000
applicationElement.Properties.Item("flushNamedPipe").Value = false
applicationElement.Properties.Item("rapidFailsPerMinute").Value = 10

Set environmentVariablesCollection = applicationElement.ChildElements.Item("environmentVariables").Collection
Set environmentVariableElement = environmentVariablesCollection.CreateNewElement("environmentVariable")
environmentVariableElement.Properties.Item("name").Value = "PHP_FCGI_MAX_REQUESTS"
environmentVariableElement.Properties.Item("value").Value = "10000"
environmentVariablesCollection.AddElement(environmentVariableElement)
Call fastCgiCollection.AddElement(applicationElement)

Set handlersSection = adminManager.GetAdminSection("system.webServer/handlers", "MACHINE/WEBROOT/APPHOST")
Set handlersCollection = handlersSection.Collection
Set addElement = handlersCollection.CreateNewElement("add")
addElement.Properties.Item("name").Value = "PHP-FastCGI"
addElement.Properties.Item("path").Value = "*.php"
addElement.Properties.Item("verb").Value = "GET,HEAD,POST"
addElement.Properties.Item("modules").Value = "FastCgiModule"
addElement.Properties.Item("scriptProcessor").Value = "C:\PHP\php-cgi.exe"
addElement.Properties.Item("resourceType").Value = "Either"
addElement.Properties.Item("requireAccess").Value = "Script"
Call handlersCollection.AddElement(addElement, 0)

adminManager.CommitChanges()