FastCGI fastCgi <>

Обзор

Элемент <fastCgi> содержит коллекцию элементов, каждый из которых создает определение пула приложений <application> FastCGI. службы IIS (IIS) 7 включает компонент FastCGI. Этот компонент обеспечивает большую надежность и более высокую производительность и позволяет запускать платформу приложений PHP и другие платформы веб-приложений в IIS 7.

Самое простое определение пула приложений FastCGI требует включения атрибута fullPath в <application> элемент для определения двоичных файлов, используемых для конкретной платформы приложений. Для платформы PHP задайте для атрибута fullPath имя каталога и файла двоичных файлов PHP.

Другие атрибуты являются необязательными и позволяют настроить ряд других параметров. К ним относятся максимальное количество запросов, которые может обрабатывать рабочий процесс FastCGI до его перезапуска, максимальное количество рабочих процессов для пула приложений и максимальное время, которое может занять запрос FastCGI.

Примечание.

Чтобы обрабатывать запросы с помощью FastCGI, сначала необходимо сопоставить путь и определенные расширения имени файла с модулем FastCGI и указать целевой процесс FastCGI в качестве обработчика скриптов.

Новые возможности в IIS 7.5

IIS 7.5 добавил в элемент следующие атрибуты <fastCgi>/<application> :

  • Атрибут monitorChangesTo позволяет указать файл для отслеживания изменений, которые могут повлиять на поведение приложения FastCGI. Например, если вы используете платформу PHP, можно настроить СЛУЖБЫ IIS для мониторинга PHP. INI-файл для изменений, указав полный путь к файлу в атрибуте monitorChangesTo .
  • Атрибут stderrMode указывает, как IIS 7 будет обрабатывать ошибки, возвращаемые из приложения FastCGI через поток STDERR.
  • Атрибут 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 Элемент <application><fastCgi> коллекции был обновлен в IIS 7.5 с атрибутами monitorChangesTo, stderrMode и signalBeforeTerminateSeconds .
IIS 7.0 Элемент <fastCgi> появился в IIS 7.0.
IIS 6,0 Н/П

Настройка

Чтобы использовать среду FastCGI, необходимо сначала установить службу ролей CGI. Процесс установки регистрирует службу ролей Common Gateway Interface (CGI) в обоих элементах <globalModules> и <modules> элементах. Чтобы установить среду FastCGI, вам не нужно выполнять никаких других действий.

Windows Server 2012 или Windows Server 2012 R2

  1. На панели задач щелкните Диспетчер сервера.
  2. В диспетчер сервера щелкните меню "Управление" и выберите пункт "Добавить роли и компоненты".
  3. В мастере добавления ролей и компонентов нажмите кнопку "Далее". Выберите тип установки и нажмите кнопку "Далее". Выберите целевой сервер и нажмите кнопку "Далее".
  4. На странице ролей сервера разверните веб-сервер (IIS), разверните веб-сервер, разверните узел "Разработка приложений", а затем выберите CGI. Нажмите кнопку Далее.
    Снимок экрана: C G I, выбранный в интерфейсе Windows Server 2012.
  5. На странице Выбор компонентов нажмите кнопку Далее.
  6. На странице Подтверждение выбранных элементов для установки щелкните Установить.
  7. На странице Результаты нажмите кнопку Закрыть.

Windows 8 или Windows 8.1

  1. На начальном экране переместите указатель на левый нижний угол, щелкните правой кнопкой "Пуск" и щелкните панель управления.
  2. В панель управления щелкните "Программы и компоненты", а затем выберите "Включить или отключить функции Windows".
  3. Разверните службы IIS, разверните веб-службы World Wide, разверните компоненты разработки приложений и выберите CGI.
    Снимок экрана: C G I, выбранный в интерфейсе Windows 8.
  4. Щелкните OK.
  5. Нажмите кнопку Закрыть.

Windows Server 2008 или Windows Server 2008 R2

  1. На панели задач нажмите кнопку "Пуск", наведите указатель на Администратор istrative Tools, а затем щелкните диспетчер сервера.
  2. В области иерархии диспетчер сервера разверните узел "Роли" и выберите веб-сервер (IIS).
  3. В области веб-сервера (IIS) прокрутите страницу до раздела "Службы ролей" и нажмите кнопку "Добавить службы ролей".
  4. На странице "Выбор служб ролей" мастера добавления служб ролей выберите CGI и нажмите кнопку "Далее".
    Снимок экрана: C G I, выбранный в интерфейсе Windows Server 2008.
  5. На странице Подтверждение выбранных элементов для установки нажмите кнопку Установить.
  6. На странице Результаты нажмите кнопку Закрыть.

Windows Vista или Windows 7

  1. На панели задач нажмите кнопку "Пуск" и щелкните панель управления.
  2. В панель управления щелкните "Программы и компоненты", а затем нажмите кнопку "Включить или отключить компоненты Windows".
  3. Разверните службы IIS, а затем выберите CGI и нажмите кнопку "ОК".
    Снимок экрана: C G I, выбранный в интерфейсе Windows Vista или Windows 7.

Инструкции

Примечание для пользователей IIS 7.0. Для некоторых действий, описанных в этом разделе, может потребоваться установить пакет microsoft Администратор istration для IIS 7.0, включающий пользовательский интерфейс для параметров FastCGI. Чтобы установить пакет microsoft Администратор istration для IIS 7.0, см. следующий URL-адрес:

Создание глобального сопоставления обработчиков FastCGI для PHP

Примечание.

Перед выполнением следующей процедуры необходимо установить двоичные файлы, которые будут выполнять указанный путь к файлу или расширение имени файла. В этом примере используется реализация PHP, доступная из https://www.php.net/.

  1. Откройте диспетчер службы IIS (IIS):

    • Если вы используете Windows Server 2012 или Windows Server 2012 R2:

      • На панели задач щелкните диспетчер сервера, щелкните "Сервис" и щелкните диспетчер службы IIS (IIS).
    • Если вы используете Windows 8 или Windows 8.1:

      • Удерживайте клавишу Windows, нажимайте букву X и щелкните панель управления.
      • Щелкните Администратор istrative Tools и дважды щелкните диспетчер службы IIS (IIS).
    • Если вы используете Windows Server 2008 или Windows Server 2008 R2:

      • На панели задач нажмите кнопку "Пуск", наведите указатель на Администратор istrative Tools, а затем щелкните диспетчер службы IIS (IIS).
    • Если вы используете Windows Vista или Windows 7:

      • На панели задач нажмите кнопку "Пуск" и щелкните панель управления.
      • Дважды щелкните Администратор istrative Tools, а затем дважды щелкните диспетчер службы IIS (IIS).
  2. В области Подключение ions щелкните имя сервера, для которого необходимо настроить сопоставления обработчиков FastCGI.

  3. На панели "Главная" дважды щелкните сопоставления обработчиков.
    Снимок экрана: сопоставления обработчиков, выбранные на панели

  4. На панели Действия выберите Добавить сопоставление модуля. Снимок экрана: сопоставления отключенных и включенных обработчиков в диспетчере I I.

  5. Введите следующие данные:

    • Введите расширение имени файла в текстовом поле пути запроса. Например, "*.php".

    • Щелкните FastCgiModule в раскрывающемся списке модуля .

    • Введите путь к обработчику сценариев в поле исполняемого файла. Например, "C:\PHP\php-cgi.exe".

    • Введите уникальное имя для сопоставления обработчика в поле "Имя ". Например, PHP-FastCGI.

      Снимок экрана: диалоговое окно

    • Нажмите кнопку " Ограничения запросов"

    • Выберите обработчик вызова, только если запрос сопоставляется с.

    • Щелкните, чтобы выбрать параметр "Файл" или "Папка ".

    • Щелкните OK.

      Снимок экрана: настройка параметров сопоставления в диалоговом окне

  6. Щелкните OK.

  7. Если вам будет предложено создать приложение FastCGI в диалоговом окне "Добавление сопоставления модулей", нажмите кнопку "Да".

    Снимок экрана перед подтверждением создания нового приложения для указанного исполняемого файла.

    Примечание.

    Это автоматически создаст приложение FastCGI для только что созданного сопоставления обработчика. Если вы выберете "Нет", вы можете создать приложение FastCGI вручную позже.

Создание приложения FastCGI для PHP

Примечание.

Перед выполнением следующей процедуры необходимо установить двоичные файлы, которые будут выполнять указанный путь к файлу или расширение имени файла. В этом примере используется реализация PHP, доступная из www.php.net.

Примечание.

Добавление приложения FastCGI не добавляет сопоставление обработчика автоматически. Для этого необходимо выполнить действия, описанные в разделе "Создание сопоставления обработчика FastCGI для PHP] этой статьи.

  1. Откройте диспетчер службы IIS (IIS):

    • Если вы используете Windows Server 2012 или Windows Server 2012 R2:

      • На панели задач щелкните диспетчер сервера, щелкните "Сервис" и щелкните диспетчер службы IIS (IIS).
    • Если вы используете Windows 8 или Windows 8.1:

      • Удерживайте клавишу Windows, нажимайте букву X и щелкните панель управления.
      • Щелкните Администратор istrative Tools и дважды щелкните диспетчер службы IIS (IIS).
    • Если вы используете Windows Server 2008 или Windows Server 2008 R2:

      • На панели задач нажмите кнопку "Пуск", наведите указатель на Администратор istrative Tools, а затем щелкните диспетчер службы IIS (IIS).
    • Если вы используете Windows Vista или Windows 7:

      • На панели задач нажмите кнопку "Пуск" и щелкните панель управления.
      • Дважды щелкните Администратор istrative Tools, а затем дважды щелкните диспетчер службы IIS (IIS).
  2. В области Подключение ions щелкните имя сервера, для которого необходимо настроить параметры FastCGI.

  3. В области "Главная" дважды щелкните FastCGI Параметры.
    Снимок экрана: Параметры Fast C G I, выбранный на панели

  4. В области действий нажмите кнопку "Добавить приложение"
    Снимок экрана: пустая панель Параметры C G I.

  5. В диалоговом окне "Добавление приложения FastCGI" введите следующие сведения:

    • Введите путь к обработчику сценариев в поле "Полный путь ". Например, "C:\PHP\php-cgi.exe".

    • Введите максимальное количество запросов для приложения FastCGI.

      Примечание.

      Для PHP это число должно быть меньше или равно максимальному количеству запросов к среде PHP, которое настраивается с помощью переменной PHP_FCGI_MAX_REQUESTS среды.
      Снимок экрана: диалоговое окно

  6. Щелкните многоточие (...) рядом с EnvironmentVariables , чтобы открыть редактор коллекции переменных среды.

  7. В диалоговом окне редактора коллекции EnvironmentVariables нажмите кнопку "Добавить".
    Снимок экрана: диалоговое окно редактора коллекции пустых переменных среды.

  8. Введите следующие сведения и нажмите кнопку "ОК".

    • Введите "PHP_FCGI_MAX_REQUESTS" для имени.

    • Введите значение 10000.

      Снимок экрана: новая переменная в списке членов с указанными свойствами.

  9. Нажмите кнопку "ОК ", чтобы закрыть диалоговое окно "Добавить приложение FastCGI".

Добавление переменной среды FastCGI для PHP

Примечание.

Перед выполнением следующей процедуры необходимо установить двоичные файлы, которые будут выполнять указанный путь к файлу или расширение имени файла. В этом примере используется реализация PHP, доступная из https://www.php.net/.

  1. Откройте диспетчер службы IIS (IIS):

    • Если вы используете Windows Server 2012 или Windows Server 2012 R2:

      • На панели задач щелкните диспетчер сервера, щелкните "Сервис" и щелкните диспетчер службы IIS (IIS).
    • Если вы используете Windows 8 или Windows 8.1:

      • Удерживайте клавишу Windows, нажимайте букву X и щелкните панель управления.
      • Щелкните Администратор istrative Tools и дважды щелкните диспетчер службы IIS (IIS).
    • Если вы используете Windows Server 2008 или Windows Server 2008 R2:

      • На панели задач нажмите кнопку "Пуск", наведите указатель на Администратор istrative Tools, а затем щелкните диспетчер службы IIS (IIS).
    • Если вы используете Windows Vista или Windows 7:

      • На панели задач нажмите кнопку "Пуск" и щелкните панель управления.
      • Дважды щелкните Администратор istrative Tools, а затем дважды щелкните диспетчер службы IIS (IIS).
  2. В области Подключение ions щелкните имя сервера, для которого необходимо настроить параметры FastCGI.

  3. В области "Главная" дважды щелкните FastCGI Параметры.
    Снимок экрана: значок Параметры fast C G I, выбранный на панели

  4. Выделите приложение PHP в области Параметры FastCGI, а затем нажмите кнопку "Изменить" на панели "Действия".
    Снимок экрана: приложение P H P, выбранное на панели Параметры Fast C G I.

  5. В диалоговом окне "Изменение приложения FastCGI" щелкните многоточие (...) рядом с EnvironmentVariables, чтобы открыть редактор коллекции переменных среды.
    Снимок экрана: диалоговое окно

  6. В диалоговом окне редактора коллекции EnvironmentVariables нажмите кнопку "Добавить".
    Снимок экрана: диалоговое окно редактора коллекции пустых переменных среды перед добавлением новой переменной.

  7. Введите следующие сведения и нажмите кнопку "ОК".

    • Введите "PHP_FCGI_MAX_REQUESTS" для имени.

    • Введите значение 10000.

      Снимок экрана: добавление новой переменной среды с указанными свойствами.

  8. Нажмите кнопку "ОК ", чтобы закрыть диалоговое окно "Добавить приложение FastCGI".

Настройка

Элемент можно настроить <fastCgi> на уровне сервера в файле applicationHost.config или на уровне сайта, на уровне приложения или на уровне каталога в файле Web.config.

Атрибуты

Нет.

Дочерние элементы

Элемент Description
application Необязательный элемент.

Добавляет определение пула процессов FastCGI в коллекцию определений пула процессов FastCGI.

Образец конфигурации

Следующий пример конфигурации добавляет приложение FastCGI для PHP, задает атрибут 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 среды должно быть числом, которое меньше или равно значению, заданному атрибутом instanceMaxRequests элемента FastCGI <application> .

Следующий пример конфигурации добавляет глобальное сопоставление обработчика FastCGI для PHP-файлов в 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 и сопоставления обработчиков, которые различаются путем сопоставления атрибутов fullPath и аргументов для <application> элемента с соответствующим атрибутом scriptProcessor в <handlers> сопоставлении процесса FastCGI. Чтобы создать эти сопоставления, параметры в атрибутах fullPath и аргументах элемента <application> должны быть добавлены в атрибут scriptProcessor в <handlers> сопоставлении для процесса FastCGI и разделены символом "|". Это сочетание служит уникальным ключом для каждого приложения FastCGI. Например, в следующем фрагменте конфигурации показаны два примера <элементов fastCgi>/<application> и соответствующие <сопоставления обработчиков> для двух обработчиков PHP для отдельных сайтов:

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

Пример кода

В следующих примерах кода добавлено приложение FastCGI для PHP, присвойте атрибуту instanceMaxRequests значение "10000" и задайте PHP_FCGI_MAX_REQUESTS для переменной среды значение "10000". Каждый пример также добавляет глобальное сопоставление обработчика FastCGI для PHP-файлов в 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 для настройки этих параметров необходимо задать параметр 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()