FastCGI: <fastCgi>

概要

<fastCgi> 要素には <application> 要素のコレクションが含まれており、それぞれで FastCGI アプリケーション プールの定義が作成されます。 インターネット インフォメーション サービス (IIS) 7 には、FastCGI コンポーネントが含まれています。 このコンポーネントにより、信頼性とパフォーマンスが向上し、PHP アプリケーション フレームワークや他の Web アプリケーション フレームワークを IIS 7 で実行できます。

最も簡単な FastCGI アプリケーション プールの定義では、<application> 要素の fullPath 属性を含めて、特定のアプリケーション フレームワークに使用するバイナリを定義する必要があります。 PHP フレームワークの場合は、fullPath 属性を PHP バイナリのディレクトリとファイル名に設定します。

他の属性は省略可能であり、他の多くのパラメーターを構成できます。 これには、FastCGI ワーカー プロセスがリサイクルされる前に処理できる要求の最大数、アプリケーション プールのワーカー プロセスの最大数、FastCGI 要求にかけることのできる最大時間が含まれます。

Note

FastCGI を使って要求を処理するには、まず、パスと特定のファイル名拡張子を FastCGI モジュールにマップし、ターゲットの FastCGI プロセスをスクリプト プロセッサとして指定する必要があります。

IIS 7.5 の新機能

IIS 7.5 では、<fastCgi>/<application> 要素に次の属性が追加されました。

  • monitorChangesTo 属性では、FastCGI アプリケーションの動作に影響する可能性がある変更を監視する対象のファイルを指定できます。 たとえば、PHP フレームワークを使っている場合は、monitorChangesTo 属性で PHP.INI ファイルへの完全なパスを指定して、そのファイルの変更を監視するように IIS を構成できます。
  • stderrMode 属性は、STDERR ストリームを介して FastCGI アプリケーションから返されるエラーを IIS 7 で処理する方法を指定します。
  • signalBeforeTerminateSeconds 属性を使うと、IIS が FastCGI アプリケーションにシャットダウンする必要があることを通知した後、指定した時間だけ待機するように、IIS を構成できます。 これにより、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> 要素の両方に Common Gateway Interface (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. [インターネット インフォメーション サービス][World Wide Web サービス][アプリケーション開発機能] の順に展開して、[CGI] を選択します。
    Windows 8 インターフェイスで選択された C G I のスクリーンショット。
  4. OK をクリックします。
  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. [インターネット インフォメーション サービス] を展開し、[CGI] を選択して、[OK] をクリックします。
    Windows Vista または Windows 7 インターフェイスで選択された C G I のスクリーンショット。

操作方法

IIS 7.0 ユーザーの場合の注意: このセクションの一部の手順では、FastCGI 設定用のユーザー インターフェイスを含む Microsoft Administration Pack for IIS 7.0 のインストールが必要な場合があります。 Microsoft Administration Pack for IIS 7.0 をインストールするには、次の URL を参照してください。

PHP 用のグローバル FastCGI ハンドラー マッピングを作成する方法

Note

次の手順を実行するには、指定するファイル パスまたはファイル名拡張子を実行するバイナリが既にインストールされている必要があります。 この例では、https://www.php.net/ から利用できる PHP の実装を使います。

  1. インターネット インフォメーション サービス (IIS) マネージャーを開きます。

    • Windows Server 2012 または Windows Server 2012 R2 を使用している場合:

      • タスク バーで、[サーバー マネージャー] をクリックし、[ツール][インターネット インフォメーション サービス (IIS) マネージャー] の順にクリックします。
    • Windows 8 または Windows 8.1 を使用している場合:

      • Windows キーを押しながら文字 X を押し、[コントロール パネル] をクリックします。
      • [管理ツール] をクリックし、[インターネット インフォメーション サービス (IIS) マネージャー] をダブルクリックします。
    • Windows Server 2008 または Windows Server 2008 R2 を使用している場合:

      • タスク バーで、[スタート] ボタンをクリックし、[管理ツール][インターネット インフォメーション サービス (IIS) マネージャー] の順にクリックします。
    • Windows Vista または Windows 7 を使用している場合:

      • タスク バーで、[スタート][コントロール パネル] の順にクリックします。
      • [管理ツール] をダブルクリックし、[インターネット インフォメーション サービス (IIS) マネージャー] をダブルクリックします。
  2. [接続] ペインで、FastCGI ハンドラー マッピングを構成するサーバー名をクリックします。

  3. [ホーム] ウィンドウで、[ハンドラー マッピング] をダブルクリックします。
    [既定の Web サイトホーム] ウィンドウで選択されているハンドラー マッピングのスクリーンショット。

  4. [アクション] ペインで、 [モジュール マップの追加]をクリックします。 I I S マネージャーの [無効] および [有効なハンドラー マッピング] のスクリーンショット。

  5. 次の情報を入力してください。

    • [要求パス] テキスト ボックスにファイル名拡張子を入力します。 たとえば、"*.php" などです。

    • [モジュール] ドロップダウン リストで [FastCgiModule] をクリックします。

    • [実行可能ファイル] ボックスにスクリプト エンジンへのパスを入力します。 たとえば、"C:\PHP\php-cgi.exe" などです。

    • [名前] ボックスに、ハンドラー マッピングの一意の名前を入力します。 たとえば、"PHP-FastCGI" などです。

      指定したオプションを含む [モジュール マッピングの追加] ダイアログのスクリーンショット。

    • [要求の制限] をクリックします

    • [要求がマップされている場合にのみハンドラーを呼び出す] をオンにします。

    • [ファイルまたはフォルダー] オプションをクリックして選びます。

    • OK をクリックします。

      [要求の制限] ダイアログの [マッピング] オプションの設定のスクリーンショット。

  6. OK をクリックします。

  7. [モジュール マッピングの追加] ダイアログ ボックスで FastCGI アプリケーションを作成するように求められたら、[はい] をクリックします。

    指定した実行可能ファイルの新しいアプリケーションを作成することを確認する前のスクリーンショット。

    Note

    これにより、先に作成したハンドラー マッピング用の FastCGI アプリケーションが自動的に作成されます。 [いいえ] を選んだ場合は、後で FastCGI アプリケーションを手動で作成できます。

PHP 用 FastCGI アプリケーションを作成する方法

Note

次の手順を実行するには、指定するファイル パスまたはファイル名拡張子を実行するバイナリが既にインストールされている必要があります。 この例では、www.php.net から利用できる PHP の実装を使います。

Note

FastCGI アプリケーションを追加しても、ハンドラー マッピングは自動的に追加されません。 そのためには、この記事の PHP 用の FastCGI ハンドラー マッピングを作成する方法に関するセクションの手順のようにする必要があります。

  1. インターネット インフォメーション サービス (IIS) マネージャーを開きます。

    • Windows Server 2012 または Windows Server 2012 R2 を使用している場合:

      • タスク バーで、[サーバー マネージャー] をクリックし、[ツール][インターネット インフォメーション サービス (IIS) マネージャー] の順にクリックします。
    • Windows 8 または Windows 8.1 を使用している場合:

      • Windows キーを押しながら文字 X を押し、[コントロール パネル] をクリックします。
      • [管理ツール] をクリックし、[インターネット インフォメーション サービス (IIS) マネージャー] をダブルクリックします。
    • Windows Server 2008 または Windows Server 2008 R2 を使用している場合:

      • タスク バーで、[スタート] ボタンをクリックし、[管理ツール][インターネット インフォメーション サービス (IIS) マネージャー] の順にクリックします。
    • Windows Vista または Windows 7 を使用している場合:

      • タスク バーで、[スタート][コントロール パネル] の順にクリックします。
      • [管理ツール] をダブルクリックし、[インターネット インフォメーション サービス (IIS) マネージャー] をダブルクリックします。
  2. [接続] ウィンドウで、FastCGI の設定を構成するサーバー名をクリックします。

  3. [ホーム] ウィンドウで、[FastCGI の設定] をダブルクリックします。
    [Standard Edition RVER ホーム] ウィンドウで [Fast C G I] 設定選択されているスクリーンショット。

  4. [操作] ウィンドウで [アプリケーションの追加] をクリックします
    空の Fast C G I 設定 ペインのスクリーンショット。

  5. [FastCGI アプリケーションの追加] ダイアログ ボックスで、次の情報を入力します。

    • [完全なパス] ボックスにスクリプト エンジンへのパスを入力します。 たとえば、"C:\PHP\php-cgi.exe" などです。

    • FastCGI アプリケーションに対する要求の最大数を入力します。

      Note

      PHP の場合、この数は、PHP_FCGI_MAX_REQUESTS 環境変数を使って構成される PHP 環境に対する要求の最大数以下である必要があります。
      既定の高速 C G I プロパティを含む [高速 C G I アプリケーションの追加] ダイアログのスクリーンショット。

  6. EnvironmentVariables の横にある省略記号 ([...]) をクリックして、環境変数コレクション エディターを開きます。

  7. [EnvironmentVariables コレクション エディター] ダイアログ ボックスで、[追加] をクリックします。
    空の [環境変数コレクション エディター] ダイアログのスクリーンショット。

  8. 次の情報を入力して、[OK] をクリックします。

    • [名前] に「PHP_FCGI_MAX_REQUESTS」と入力します。

    • [値] に「10000」と入力します。

      指定されたプロパティを持つメンバーリストの新しい変数のスクリーンショット。

  9. [OK] をクリックして、[FastCGI アプリケーションの追加] ダイアログ ボックスを閉じます。

PHP 用の FastCGI 環境変数を追加する方法

Note

次の手順を実行するには、指定するファイル パスまたはファイル名拡張子を実行するバイナリが既にインストールされている必要があります。 この例では、https://www.php.net/ から利用できる PHP の実装を使います。

  1. インターネット インフォメーション サービス (IIS) マネージャーを開きます。

    • Windows Server 2012 または Windows Server 2012 R2 を使用している場合:

      • タスク バーで、[サーバー マネージャー] をクリックし、[ツール][インターネット インフォメーション サービス (IIS) マネージャー] の順にクリックします。
    • Windows 8 または Windows 8.1 を使用している場合:

      • Windows キーを押しながら文字 X を押し、[コントロール パネル] をクリックします。
      • [管理ツール] をクリックし、[インターネット インフォメーション サービス (IIS) マネージャー] をダブルクリックします。
    • Windows Server 2008 または Windows Server 2008 R2 を使用している場合:

      • タスク バーで、[スタート] ボタンをクリックし、[管理ツール][インターネット インフォメーション サービス (IIS) マネージャー] の順にクリックします。
    • Windows Vista または Windows 7 を使用している場合:

      • タスク バーで、[スタート][コントロール パネル] の順にクリックします。
      • [管理ツール] をダブルクリックし、[インターネット インフォメーション サービス (IIS) マネージャー] をダブルクリックします。
  2. [接続] ウィンドウで、FastCGI の設定を構成するサーバー名をクリックします。

  3. [ホーム] ウィンドウで、[FastCGI の設定] をダブルクリックします。
    [Standard Edition RVER ホーム] ウィンドウで選択されている [Fast C G I 設定] アイコンのスクリーンショット。

  4. [FastCGI の設定] ウィンドウで PHP アプリケーションを強調表示にした後、[操作] ウィンドウで [編集] をクリックします
    Fast C G I 設定 ペインで選択された P H P アプリケーションのスクリーンショット。

  5. [FastCGI アプリケーションの編集] ダイアログ ボックスで、EnvironmentVariables の横にある省略記号 ([...]) をクリックして、環境変数コレクション エディターを開きます。
    指定したオプションを含む [高速 C G I アプリケーションの編集] ダイアログのスクリーンショット。

  6. [EnvironmentVariables コレクション エディター] ダイアログ ボックスで、[追加] をクリックします。
    新しい変数を追加する前の空の [環境変数コレクション エディター] ダイアログのスクリーンショット。

  7. 次の情報を入力して、[OK] をクリックします。

    • [名前] に「PHP_FCGI_MAX_REQUESTS」と入力します。

    • [値] に「10000」と入力します。

      指定したプロパティを持つ新しい環境変数を追加した後のスクリーンショット。

  8. [OK] をクリックして、[FastCGI アプリケーションの追加] ダイアログ ボックスを閉じます。

構成

<fastCgi> 要素は、ApplicationHost.config ファイルのサーバー レベルで、または 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>

Note

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>

Note

FastCGI の設定は、特別な形式に設定された FastCGI アプリケーションとハンドラー マッピングを使って、サイトごとに構成できます。これは、<application> 要素の fullPatharguments 属性を、FastCGI プロセスの <handlers> マッピングでの対応する scriptProcessor 属性と照合して区別されます。 これらのマッピングを作成するには、<application> 要素の fullPatharguments 属性の設定を、FastCGI プロセスの <handlers> マッピングの scriptProcessor 属性に、パイプ "|" 文字で区切って追加する必要があります。 この組み合わせは、各 FastCGI アプリケーションの一意キーとして機能します。 たとえば、次に示す構成抜粋は、<fastCgi>/<application> 要素の 2 つの例と、それに対応する 2 つのサイト固有 PHP ハンドラーの <handlers> マッピングです。

<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

Note

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