共用方式為


FastCGI 應用程式應用程式<>

概觀

FastCGI 元素包含特定 FastCGI <application> 進程集區的組態設定。 使用FastCGI時,IIS會使用 元素 maxInstances屬性<application>中的值,以判斷可在進程集區中執行的FastCGI進程數目。

最簡單的 FastCGI 應用程式集區定義會要求您在 元素中包含 <application> fullPath 屬性,以定義要用於特定應用程式架構的二進位檔。 針對 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 如何處理透過 STDERR 資料流從 FastCGI 應用程式傳回的錯誤。
  • signalBeforeTerminateSeconds 屬性可讓您將 IIS 設定為在 IIS 向 FastCGI 應用程式發出需要關閉的 FastCGI 應用程式發出訊號之後,等候指定的一段時間。 這可讓 FastCGI 應用程式在 IIS 終止進程之前清除任何設定。

相容性

版本 備註
IIS 10.0 <application> 在 IIS 10.0 中修改專案。
IIS 8.5 專案 <application> 未在 IIS 8.5 中修改。
IIS 8.0 屬性的 maxInstances 預設值已從 4 變更為 0 IIS 8.0 中的 。
IIS 7.5 集合 <application><fastCgi> 元素已在 IIS 7.5 中使用 monitorChangesTostderrModesignalBeforeTerminateSeconds 屬性更新。
IIS 7.0 集合 <application><fastCgi> 元素是在 IIS 7.0 中引進的。
IIS 6.0 N/A

設定

若要使用 FastCGI 環境,您必須先安裝 CGI 角色服務。 安裝程式會在和 <modules> 元素中<globalModules>註冊通用閘道介面 (CGI) 角色服務。 您不需要執行任何其他步驟來安裝 FastCGI 環境。

Windows Server 2012 或 Windows Server 2012 R2

  1. 在工作列上,按一下 [伺服器管理員]
  2. 伺服器管理員 中,按兩下 [管理] 功能表,然後按下 [新增角色和功能]。
  3. 在 [ 新增角色和功能 精靈] 中,按 [ 下一步]。 選取安裝類型,然後按 [ 下一步]。 選取目的地伺服器,然後按 [下一步]。
  4. 在 [ 伺服器角色] 頁面上,依序展開 [網頁伺服器][Web 伺服器]、[ 應用程式開發],然後選取 [ CGI]。 按一下 [下一步] 。
    [伺服器角色] 對話框的螢幕快照。已核取並醒目提示 C G I。
  5. 在 [選取功能] 頁面上,按一下 [下一步]
  6. 在 [確認安裝選項] 頁面上,按一下 [安裝]
  7. 在 [結果] 頁面上,按一下 [關閉]

Windows 8 或 Windows 8.1

  1. 在 [開始] 畫面上,將指標一路移至左下角,以滑鼠右鍵按兩下 [開始] 按鈕,然後按兩下 [控制台]。
  2. 控制台 中,按兩下 [程式和功能],然後按兩下 [開啟或關閉 Windows 功能]。
  3. 依序展開 [網際網路資訊服務]、[萬維網服務]、[應用程式開發功能],然後選取 [CGI]。
    [視窗功能] 對話框的螢幕快照。已選取展開功能表中的 C G I。
  4. 按一下 [確定]
  5. 按一下 [關閉] 。

Windows Server 2008 或 Windows Server 2008 R2

  1. 在任務欄上,按兩下 [開始],指向 [管理員 工具],然後按兩下 [伺服器管理員]。
  2. [伺服器管理員 階層] 窗格中,展開 [角色],然後按兩下 [Web 伺服器] [IIS]。
  3. 在 [Web 伺服器 (IIS)] 窗格中,捲動至 [角色服務] 區段,然後按兩下 [新增角色服務]。
  4. 在 [新增角色服務精靈] 的 [選取角色服務] 頁面上,選取 [CGI],然後按 [下一步]。
    [角色服務] 頁面的螢幕快照。C G I 已醒目提示。
  5. 在 [確認安裝選項] 頁面上,按一下 [安裝]
  6. 在 [結果] 頁面上,按一下 [關閉]

Windows Vista 或 Windows 7

  1. 在任務欄上,按兩下 [開始],然後按兩下 [控制台]。
  2. 控制台 中,按兩下 [程式和功能],然後按兩下 [開啟或關閉 Windows 功能]。
  3. 展開 [網際網路資訊服務],然後選取 [CGI],然後按兩下 [確定]。
    [Windows 功能] 對話框的螢幕快照。C G I 已醒目提示。

作法

IIS 7.0 使用者的注意事項:本節中的某些步驟可能需要您安裝適用於 IIS 7.0 的 Microsoft 管理員 istration Pack,其中包含 FastCGI 設定的使用者介面。 若要安裝適用於 IIS 7.0 的 Microsoft 管理員 istration Pack,請參閱下列 URL:

如何建立 PHP 的全域 FastCGI 處理程序對應

注意

在下列程式正常運作之前,您必須先安裝二進位檔,才能執行您指定的檔案路徑或擴展名。 此範例使用可從 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. [連線 ions] 窗格中,按下您要設定 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. 開啟 網際網路資訊服務 (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. [連線 ions] 窗格中,按下您要設定 FastCGI 設定的伺服器名稱。

  3. 在 [首頁] 窗格中,按兩下 [FastCGI 設定]。

    伺服器首頁的螢幕快照。快速 C G I 設定 已醒目提示。

  4. 在 [ 動作] 窗格中,按兩下 [ 新增應用程式]。

    I I S 管理員中快速 C G I 設定 頁面的螢幕快照。

  5. 在 [ 新增 FastCGI 應用程式 ] 對話框中,輸入下列資訊:

    • 在 [完整路徑] 方塊中輸入腳本引擎的路徑。 例如,“C:\PHP\php-cgi.exe”。

    • 輸入 FastCGI 應用程式的要求數目上限。

      注意

      針對 PHP,此數目必須小於或等於 PHP 環境的要求數目上限,這是使用 PHP_FCGI_MAX_REQUESTS 環境變數所設定。

      [新增快速 C G I 應用程式] 對話框的螢幕快照。

  6. 按兩下 EnvironmentVariables的省略號 (...),以開啟環境變數集合編輯器。

  7. 在 [ EnvironmentVariables 集合編輯器] 對話框中,按兩下 [ 新增]。

    [環境變數集合編輯器] 對話框的螢幕快照。

  8. 輸入下列資訊,然後按兩下列資訊,然後按

    • 針對 [ 名稱] 輸入 「PHP_FCGI_MAX_REQUESTS」。

    • 針對 [值] 輸入 “10000”。

      [環境變數集合編輯器] 對話框的螢幕快照。P H P F C G I Max 要求會在 [成員] 欄位中醒目提示。

  9. 按兩下 [確定 ] 關閉 [ 新增 FastCGI 應用程式 ] 對話框。

如何新增適用於 PHP 的 FastCGI 環境變數

注意

在下列程式正常運作之前,您必須先安裝二進位檔,才能執行您指定的檔案路徑或擴展名。 此範例使用可從 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. [連線 ions] 窗格中,按下您要設定 FastCGI 設定的伺服器名稱。

  3. 在 [首頁] 窗格中,按兩下FastCGI 設定

    I S 管理員中 [伺服器首頁] 的螢幕快照。已醒目提示快速 C G I 設定 的 THe 圖示。

  4. 反白顯示 FastCGI 設定 窗格中的 PHP 應用程式,然後按兩下 [動作] 窗格中的 [編輯]。

    I S 管理員內快速 C G I 設定 頁面的螢幕快照。

  5. 在 [編輯 FastCGI 應用程式] 對話框中,按兩下 EnvironmentVariables的省略號 (...), 以開啟環境變數集合編輯器。

    [編輯快速 C G I 應用程式] 對話框的螢幕快照。

  6. 在 [ EnvironmentVariables 集合編輯器] 對話框中,按兩下 [ 新增]。

    [環境變數集合編輯器] 窗格的螢幕快照。

  7. 輸入下列資訊,然後按兩下列資訊,然後按

    • 針對 [ 名稱] 輸入 「PHP_FCGI_MAX_REQUESTS」。

    • 針對 [值] 輸入 “10000”。

      [環境變數集合編輯器] 窗格的螢幕快照。P H P F C G I 已醒目提示。

  8. 按兩下 [確定 ] 關閉 [ 新增 FastCGI 應用程式 ] 對話框。

組態

您可以在 <application> ApplicationHost.config 檔案中的伺服器層級或 Web.config 檔案的月臺層級、應用層級或目錄層級設定 專案。

屬性

屬性 描述
activityTimeout 選擇性 uint 屬性。

指定 FastCGI 進程可能需要處理的最大時間,以秒為單位。 可接受的值介於 10 到 3600 的範圍內。

IIS 7.0 中的預設值為 30;IIS 7.5 的預設值為 70
arguments 選擇性字串屬性。

指定 FastCGI 程式的命令行自變數。
flushNamedPipe 選擇性 布爾 值屬性。

指定命名管道是否在每個要求結尾排清。 此屬性僅適用於使用具名管道通訊協定時。

預設值是 false
fullPath 必要的字串屬性。

指定 FastCGI 程式的完整路徑。
idleTimeout 選擇性 uint 屬性。

指定在關閉進程之前,FastCGI 進程可以閑置的時間上限,以秒為單位。 可接受的值介於 10 到 604800 的範圍內。

預設值是 300
instanceMaxRequests 選擇性 uint 屬性。

指定每個 FastCGI 背景工作進程在回收之前可以處理的要求數目上限。 可接受的值介於 1 到 10000000 的範圍內。

預設值是 200
maxInstances 選擇性 uint 屬性。

指定可在應用程式集區中啟動的FastCGI背景工作進程數目上限。 可接受的值介於 0 到 10000 的範圍內。

預設值是 0
monitorChangesTo 選項字串屬性。

指定要監視變更之檔案的完整路徑。 偵測到檔案的變更時,IIS 將會終止並重新啟動 屬性中指定的 fullPath FastCGI應用程式。

注意: 這個屬性已在 IIS 7.5 中新增。

沒有預設值。
protocol 選擇性列舉屬性。

指定用來與 FastCGI 進程通訊的傳輸機制。

通訊 協定 屬性可以是下列其中一個可能的值:
Description
NamedPipe 命名管道通訊協定將用來與FastCGI背景工作進程通訊。
Tcp TCP 通訊協定將用來與FastCGI背景工作進程通訊。
預設值是 NamedPipe
queueLength 選擇性 uint 屬性。

指定可以排入 FastCGI 進程集區佇列的要求數目上限。 可接受的值介於 1 到 10000000 的範圍內。

預設值是 1000
requestTimeout 選擇性 uint 屬性。

指定 FastCGI 進程要求可能需要的時間上限,以秒為單位。 可接受的值介於 10 到 604800 的範圍內。

預設值是 90
signalBeforeTerminateSeconds 選擇性 uint 屬性。

指定 IIS 在 IIS 發出 FastCGI 應用程式需要關機的訊號之後等候的時間量。 當此屬性設定為大於零的值時,IIS 會建立可繼承的事件,並將事件的句柄值傳遞至FastCGI進程做為環境變數的值 _FCGI_SHUTDOWN_EVENT_

注意: 這個屬性已在 IIS 7.5 中新增。

預設值是 0
stderrMode 選擇性列舉屬性。

指定 IIS 將用於 FastCGI 應用程式在 STDERR 數據流中傳回的錯誤行為。

注意: 這個屬性已在 IIS 7.5 中新增。

stderrMode 屬性可以是下列其中一個可能的值:
Description
ReturnStdErrIn500 指定 IIS 會傳回 HTTP 500 錯誤,並將 STDERR 數據流中的內容顯示給用戶端。 (注意:這符合 IIS 7.0 行為。

數值為 0
ReturnGeneric500 指定 IIS 會將一般 HTTP 500 錯誤傳回給用戶端。 這可防止 STDERR 數據流中的內容傳回至用戶端。

數值為 1
IgnoreAndReturn200 指定 IIS 會忽略 STDERR 數據流中的文字,並傳回 HTTP 200 錯誤,並將 STDOUT 資料流的內容傳回用戶端。

數值為 2
TerminateProcess 指定 IIS 會終止 FastCGI 進程,並將一般 HTTP 500 錯誤傳回給用戶端。

數值為 3
預設值是 ReturnStdErrIn500

子元素

元素 描述
environmentVariables 選擇性項目。

指定 IIS 將傳遞至 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 應用程式和處理程式對應來設定每個月臺,這些設定可藉由比對具有 FastCGI 程式對應對應中<handlers>對應 scriptProcessor 屬性之元素的 fullPath自變數屬性<application>來區分。 若要建立這些對應,元素的 fullPath自變數屬性<application>中的設定必須新增至 FastCGI 進程的對應中的 <handlers> scriptProcessor 屬性,並以管道 “|” 字元分隔。 這個組合可作為每個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>

範例程式碼

下列程式代碼範例會新增適用於 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 來設定這些設定時,請務必將認可參數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()