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 中使用 monitorChangesTo、 stderrMode 和 signalBeforeTerminateSeconds 屬性更新。
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()