FastCGI <fastCgi>

概述

<fastCgi> 元素包含一组 <application> 元素,每个元素都创建 FastCGI 应用程序池定义。 Internet Information Services (IIS) 7 包括 FastCGI 组件。 此组件提供更高的可靠性和更好的性能,并允许在 IIS 7 上运行 PHP 应用程序框架和其他 Web 应用程序框架。

最简单的 FastCGI 应用程序池定义要求在 <application> 元素中包含 fullPath 属性,以定义要用于特定应用程序框架的二进制文件。 对于 PHP 框架,请将 fullPath 属性设置为 PHP 二进制文件的目录和文件名。

其他属性是可选的,可用于配置许多其他参数。 其中包括 FastCGI 工作进程在回收之前可以处理的最大请求数、应用程序池的最大工作进程数,以及 FastCGI 请求可以花费的最大时间。

注意

要使用 FastCGI 处理请求,必须先将路径和特定文件扩展名映射到 FastCGI 模块,并将目标 FastCGI 进程指定为脚本处理器。

IIS 7.5 中的新增功能

IIS 7.5 在 <fastCgi>/<application> 元素中增加了以下属性:

  • monitorChangesTo 属性可用于指定一个文件来监视可能影响 FastCGI 应用程序行为的更改。 例如,如果您使用 PHP 框架,则可以在 monitorChangesTo 属性中指定文件的完整路径,从而将 IIS 配置为监视 PHP.INI 文件的更改。
  • stderrMode 属性指定 IIS 7 如何处理通过 STDERR 流从 FastCGI 应用程序返回的错误。
  • signalBeforeTerminateSeconds 属性可用于将 IIS 配置为等待指定时间段,此后 IIS 会向 FastCGI 应用程序发出信号,表明自己需要关闭。 这样,FastCGI 应用程序就可以在 IIS 终止进程之前清理任何设置。

兼容性

版本 说明
IIS 10.0 <fastCgi> 元素在 IIS 10.0 中未进行修改。
IIS 8.5 <fastCgi> 元素在 IIS 8.5 中未进行修改。
IIS 8.0 <fastCgi> 元素在 IIS 8.0 中未进行修改。
IIS 7.5 <fastCgi> 集合的 <application> 元素在 IIS 7.5 中更新了 monitorChangesTostderrModesignalBeforeTerminateSeconds 属性。
IIS 7.0 <fastCgi> 元素是在 IIS 7.0 中引入的。
IIS 6.0 空值

安装

若要使用 FastCGI 环境,必须先安装 CGI 角色服务。 在安装过程中,会同时在 <globalModules><modules> 元素中注册通用网关接口 (CGI) 角色服务。 无需执行任何其他步骤即可安装 FastCGI 环境。

Windows Server 2012 或 Windows Server 2012 R2

  1. 在任务栏上,单击 “服务器管理器”。
  2. 在“服务器管理器”中,单击“管理”菜单,然后单击“添加角色和功能”。
  3. 在“添加角色和功能”向导中,单击“下一步”。 选择安装类型,然后单击“下一步”。 选择目标服务器,然后单击“下一步”。
  4. 在“服务器角色”页上,依次展开“Web 服务器 (IIS)”、“Web 服务器”和“应用程序开发”,然后选择“CGI”。 单击 “下一步”
    Windows Server 2012 接口中选择的 C G I 的屏幕截图。
  5. 在“选择功能”页上,单击“下一步”
  6. “确认安装选择”页上,单击“安装”
  7. 在“结果” 页面中单击“关闭”

Windows 8 或 Windows 8.1

  1. 在“开始”屏幕上,将指针一直移动到左下角,右键单击“开始”按钮,然后单击“控制面板”
  2. 在“控制面板”中,单击“程序与功能”,然后单击“打开或关闭 Windows 功能”。
  3. 依次展开“Internet 信息服务”、“万维网服务”和“应用程序开发功能”,然后选择“CGI”。
    Windows 8 界面中选择的 C G I 的屏幕截图。
  4. 单击“确定”。
  5. 单击“关闭” 。

Windows Server 2008 或 Windows Server 2008 R2

  1. 在任务栏上,单击“开始”,指向“管理工具”,然后单击“服务器管理器”。
  2. 在“服务器管理器”层次结构窗格中,展开“角色”,然后单击“Web 服务器(IIS)”。
  3. 在“Web 服务器(IIS)”窗格中,滚动到“角色服务”部分,然后单击“添加角色服务”。
  4. 在“添加角色服务向导”的“选择角色服务”页上,选择“CGI”,然后单击“下一步”。
    Windows Server 2008 接口中选择的 C G I 的屏幕截图。
  5. “确认安装选择”页中,单击“安装”
  6. 在“结果” 页面中单击“关闭”

Windows Vista 或 Windows 7

  1. 在任务栏上,单击“开始”,然后单击“控制面板”。
  2. 在“控制面板”中,单击“程序与功能”,然后单击“打开或关闭 Windows 功能”。
  3. 展开“Internet Information Services”,选择“CGI”,然后单击“确定”。
    在 Windows Vista 或 Windows 7 界面中选择的 C G I 的屏幕截图。

操作方式

IIS 7.0 用户请注意,本节中的某些步骤可能需要安装 Microsoft Administration Pack for IIS 7.0,其中包括 FastCGI 设置用户界面。 若要安装 Microsoft Administration Pack for IIS 7.0,请参阅以下 URL:

如何为 PHP 创建全局 FastCGI 处理程序映射

注意

在执行以下过程之前,您必须已经安装了将执行您指定的文件路径或文件扩展名的二进制文件。 此示例使用 https://www.php.net/ 中提供的 PHP 实现。

  1. 打开 Internet Information Services (IIS) 管理器:

    • 如果使用的是 Windows Server 2012 或 Windows Server 2012 R2:

      • 在任务栏上,单击“服务器管理器”,单击“工具”,然后单击“Internet Information Services (IIS)管理器”
    • 如果使用的是 Windows 8 或 Windows 8.1:

      • 按住 Windows 键,按字母 X,然后单击“控制面板”。
      • 单击“管理工具”,然后双击“Internet 信息服务(IIS)管理器”。
    • 如果使用的是 Windows Server 2008 或 Windows Server 2008 R2:

      • 在任务栏上,单击“开始”,指向“管理工具”,然后单击“Internet Information Services (IIS)管理器”
    • 如果使用的是 Windows Vista 或 Windows 7:

      • 在任务栏上,单击“开始”,然后单击“控制面板”。
      • 双击“管理工具”,然后双击“Internet 信息服务(IIS)管理器”。
  2. 在“连接”窗格中,单击要为其配置 FastCGI 处理程序映射的服务器名称。

  3. 在“开始”窗格中,双击“处理程序映射”。
    在“默认网站主页”窗格中选择的“处理程序映射”的屏幕截图。

  4. “操作” 窗格中,单击 “添加模块映射”I S 管理器中“已禁用”和“已启用的处理程序映射”的屏幕截图。

  5. 输入以下信息:

    • 在“请求路径”文本框中输入文件扩展名。 例如,“*.php”。

    • 在“模块”下拉列表中单击 FastCgiModule。

    • 在“可执行文件”框中输入脚本引擎的路径。 例如,“C:\PHP\php-cgi.exe”。

    • 在“名称”框中输入处理程序映射的唯一名称。 例如,“PHP-FastCGI”。

      包含指定选项的“添加模块映射”对话框的屏幕截图。

    • 单击“请求限制”

    • 选择“仅当请求映射到以下对象时才调用处理程序”。

    • 单击以选择“文件”或“文件夹”选项。

    • 单击“确定”。

      设置“请求限制”对话框中的“映射”选项的屏幕截图。

  6. 单击“确定”。

  7. 如果“添加模块映射”对话框中系统提示创建 FastCGI 应用程序,请单击“是”。

    在确认为指定可执行文件创建新应用程序之前,屏幕截图。

    注意

    这将为刚刚创建的处理程序映射自动创建 FastCGI 应用程序。 如果选择“否”,则可以稍后手动创建 FastCGI 应用程序。

如何为 PHP 创建 FastCGI 应用程序

注意

在执行以下过程之前,您必须已经安装了将执行您指定的文件路径或文件扩展名的二进制文件。 此示例使用 www.php.net 中提供的 PHP 实现。

注意

添加 FastCGI 应用程序后,系统并不会自动添加处理程序映射。 为此,需按照本文的如何为 PHP 创建 FastCGI 处理程序映射部分中的步骤操作。

  1. 打开 Internet Information Services (IIS) 管理器:

    • 如果使用的是 Windows Server 2012 或 Windows Server 2012 R2:

      • 在任务栏上,单击“服务器管理器”,单击“工具”,然后单击“Internet Information Services (IIS)管理器”
    • 如果使用的是 Windows 8 或 Windows 8.1:

      • 按住 Windows 键,按字母 X,然后单击“控制面板”。
      • 单击“管理工具”,然后双击“Internet 信息服务(IIS)管理器”。
    • 如果使用的是 Windows Server 2008 或 Windows Server 2008 R2:

      • 在任务栏上,单击“开始”,指向“管理工具”,然后单击“Internet Information Services (IIS)管理器”
    • 如果使用的是 Windows Vista 或 Windows 7:

      • 在任务栏上,单击“开始”,然后单击“控制面板”。
      • 双击“管理工具”,然后双击“Internet 信息服务(IIS)管理器”。
  2. 在“连接”窗格中,单击要为其配置 FastCGI 设置的服务器名称。

  3. 在“主页”窗格中,双击“FastCGI 设置”。
    标准版RVER 主页窗格中选择的快速 C G I 设置屏幕截图。

  4. 在“操作”窗格中,单击“添加应用程序”
    空的 Fast C G I 设置 窗格的屏幕截图。

  5. 在“添加 FastCGI 应用程序”对话框中,输入以下信息:

    • 在“完整路径”框中输入脚本引擎的路径。 例如,“C:\PHP\php-cgi.exe”。

    • 输入 FastCGI 应用程序的最大请求数。

      注意

      对于 PHP,此数字必须小于或等于 PHP 环境的最大请求数(使用 PHP_FCGI_MAX_REQUESTS 环境变量配置)。
      “添加快速 C G I 应用程序”对话框的屏幕截图,其中包含默认的 Fast C G I 属性。

  6. 单击 EnvironmentVariables 旁边的省略号 (...),打开环境变量集合编辑器。

  7. 在“EnvironmentVariables 集合编辑器”对话框中,单击“添加”。
    空环境变量集合编辑器对话框的屏幕截图。

  8. 输入以下信息,然后单击“确定”。

    • 在“名称”中,输入“PHP_FCGI_MAX_REQUESTS”。

    • 在“值”中,输入“10000”。

      “成员”列表中的新变量的屏幕截图,其中包含指定的属性。

  9. 单击“确定”关闭“添加 FastCGI 应用程序”对话框。

如何为 PHP 添加 FastCGI 环境变量

注意

在执行以下过程之前,您必须已经安装了将执行您指定的文件路径或文件扩展名的二进制文件。 此示例使用 https://www.php.net/ 中提供的 PHP 实现。

  1. 打开 Internet Information Services (IIS) 管理器:

    • 如果使用的是 Windows Server 2012 或 Windows Server 2012 R2:

      • 在任务栏上,单击“服务器管理器”,单击“工具”,然后单击“Internet Information Services (IIS)管理器”
    • 如果使用的是 Windows 8 或 Windows 8.1:

      • 按住 Windows 键,按字母 X,然后单击“控制面板”。
      • 单击“管理工具”,然后双击“Internet 信息服务(IIS)管理器”。
    • 如果使用的是 Windows Server 2008 或 Windows Server 2008 R2:

      • 在任务栏上,单击“开始”,指向“管理工具”,然后单击“Internet Information Services (IIS)管理器”
    • 如果使用的是 Windows Vista 或 Windows 7:

      • 在任务栏上,单击“开始”,然后单击“控制面板”。
      • 双击“管理工具”,然后双击“Internet 信息服务(IIS)管理器”。
  2. 在“连接”窗格中,单击要为其配置 FastCGI 设置的服务器名称。

  3. 在“主页”窗格中,双击“FastCGI 设置”。
    标准版RVER 主页窗格中选择的“快速 C G I 设置”图标的屏幕截图。

  4. 在“FastCGI 设置”窗格中突出显示 PHP 应用程序,然后在“操作”窗格中单击“编辑”
    “快速 C G I 设置”窗格中选择的 P H P 应用程序的屏幕截图。

  5. 在“编辑 FastCGI 应用程序”对话框中,单击 EnvironmentVariables 旁边的省略号 (...) 以打开环境变量集合编辑器。
    包含指定选项的“编辑快速 C G I 应用程序”对话框的屏幕截图。

  6. 在“EnvironmentVariables 集合编辑器”对话框中,单击“添加”。
    添加新变量之前空环境变量集合编辑器对话框的屏幕截图。

  7. 输入以下信息,然后单击“确定”。

    • 在“名称”中,输入“PHP_FCGI_MAX_REQUESTS”。

    • 在“值”中,输入“10000”。

      使用指定属性添加新环境变量后的屏幕截图。

  8. 单击“确定”关闭“添加 FastCGI 应用程序”对话框。

配置

可以使用 ApplicationHost.config 文件在站点级别、应用程序级别配置 <fastCgi> 元素,也可以使用 Web.config 文件在目录级别配置。

特性

无。

子元素

元素 说明
application 可选元素。

将 FastCGI 进程池定义添加到 FastCGI 进程池定义的集合中。

配置示例

以下配置示例为 PHP 添加了 FastCGI 应用程序,将 instanceMaxRequests 属性设置为“10000”,并将 PHP_FCGI_MAX_REQUESTS 环境变量设置为“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>

注意

对于 PHP,PHP_FCGI_MAX_REQUESTS 环境变量的值必须小于或等于 FastCGI 的 <application> 元素的 instanceMaxRequests 属性指定的值。

以下配置示例将 PHP 文件的全局 FastCGI 处理程序映射添加到 IIS,并指定 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>

注意

可以使用特殊格式的 FastCGI 应用程序和处理程序映射来逐个站点配置 FastCGI 设置,这些映射的区分方法如下:将 <application> 元素的 fullPatharguments 属性与 FastCGI 进程中 <handlers> 映射的对应 scriptProcessor 属性进行匹配。 若要创建这些映射,必须将 <application> 元素的 fullPatharguments 属性中的设置添加到 FastCGI 进程的 <handlers> 映射中的 scriptProcessor 属性,并用管道“|”字符分隔。 此组合用作每个 FastCGI 应用程序的唯一键。 例如,以下配置摘录显示了两个特定于站点的 PHP 处理程序的两个 <fastCgi>/<application> 元素及其对应<处理程序>映射:

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

代码示例

以下代码示例为 PHP 添加 FastCGI 应用程序,将 instanceMaxRequests 属性设置为“10000”,将 PHP_FCGI_MAX_REQUESTS 环境变量设置为“10000”。每个示例还将 PHP 文件的全局 FastCGI 处理程序映射添加到 IIS,并指定 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

注意

使用 AppCmd.exe 配置这些设置时,必须确保将 commit 参数设置为 apphost。 这会将配置设置提交到 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()