首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

64 位 Windows IIS 運行 PHP 報錯「%1 不是有效的 Win32 應用程式」與「Service Unavailable」完整解決方案

     編輯:PHP 相關知識

    問題背景

    在 64 位 Windows Server (IIS 7+) 配置 PHP 後,靜態 HTML 正常,但請求 .php 返回:

    HTTP Error 500.0 - Internal Server Error
    %1 不是有效的 Win32 應用程式 (0x800700c1)

    或啟用 32 位模式後出現:

    Service Unavailable (HTTP 503)

    根本原因

    64 位 IIS 預設應用程式池運行在 64 位模式,若安裝的是 32 位 PHP (php-cgi.exe),會導致模式不匹配;強制啟用 32 位模式後,若 ASP.NET 版本未註冊或衝突,會導致應用程式池崩潰 (503)。

    解決步驟(按順序執行)

    步驟 1:啟用應用程式池 32 位模式

    以管理員身分開啟「命令提示字元」,執行:

    cscript %SYSTEMDRIVE%\inetpub\adminscripts\adsutil.vbs SET W3SVC/AppPools/Enable32bitAppOnWin64 1

    說明:%SYSTEMDRIVE% 通常為 C:。若系統盤不同,請替換實際路徑(如 D:)。執行成功會顯示 Enable32bitAppOnWin64 : (BOOLEAN) True。

    步驟 2:重新註冊 ASP.NET (修復 503 Service Unavailable)

    啟用 32 位模式後,ASP.NET ISAPI 篩選器可能未正確註冊,導致應用程式池啟動失敗。執行:

    %SYSTEMROOT%\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -i

    關鍵點:

    • %SYSTEMROOT% 通常為 C:\Windows。
    • 使用 Framework (非 Framework64) 目錄下的 aspnet_regiis.exe,對應 32 位模式。
    • .NET 版本視安裝情況調整:v1.1.4322、v2.0.50727、v4.0.30319 等。建議優先嘗試最高安裝版本。

    步驟 3:驗證應用程式池設定 (IIS 管理器)

    1. 開啟 inetmgr,選擇網站對應的應用程式池。
    2. 右鍵「進階設定」→ 啟用 32 位應用程式 = True。
    3. .NET CLR 版本:若 PHP 不依賴 ASP.NET,可設為 無受控代碼;若共存,選 v4.0 或 v2.0。
    4. 管線模式:整合式 (建議) 或 經典式。
    5. 身分識別:ApplicationPoolIdentity (預設) 或自訂帳戶(需具備 PHP 目錄讀取/執行權限)。

    步驟 4:PHP 與 IIS 映射配置 (Handler Mapping)

    1. IIS 管理器 → 網站 → 「處理常式對應」→ 「新增模組對應」。
    2. 請求路徑:*.php
    3. 模組:FastCgiModule
    4. 可執行檔:C:\PHP\php-cgi.exe (實際 PHP 安裝路徑)
    5. 名稱:PHP via FastCGI
    6. 「請求限制」→ 「存取」→ 勾選 指令碼、取消勾選「檔案」。

    步驟 5:FastCGI 設定優化 (php.ini)

    ; php.ini 關鍵設定
    cgi.force_redirect = 0
    cgi.fix_pathinfo = 1
    fastcgi.impersonate = 1
    date.timezone = "Asia/Taipei"
    extension_dir = "ext"
    ; 啟用常用擴展
    extension=curl
    extension=mbstring
    extension=openssl
    extension=pdo_mysql

    常見坑點與排查

    現象可能原因排查動作
    仍報 %1 not valid Win32PHP 為 64 位版本,但應用程式池啟用 32 位下載對應位數 PHP,或關閉應用程式池 32 位模式
    503 Service Unavailable應用程式池啟動即崩潰檢查事件檢視器 → System/Application 日誌;執行步驟 2 重註冊 ASP.NET
    404 / 500.19Handler Mapping 路徑錯誤、權限不足確認 php-cgi.exe 實際路徑、IIS_IUSRS 讀取/執行權限
    No input file specifiedcgi.fix_pathinfo=0 或 FastCGI 路徑解析錯誤設定 cgi.fix_pathinfo=1、確認 SCRIPT_FILENAME 映射

    驗證腳本

    在網站根目錄建立 info.php:

    <?php phpinfo(); ?>

    瀏覽器訪問 https://your-server/info.php,應顯示 PHP 版本資訊、Server API = CGI/FastCGI、Architecture = x86 (32 位) 或 x64 (64 位) 與應用程式池模式一致。

    補充:手動編輯 applicationHost.config (進階)

    若腳本執行受限,可直接編輯 C:\Windows\System32\inetsrv\config\applicationHost.config:

    <applicationPools>
      <add name="DefaultAppPool" enable32BitAppOnWin64="true" managedRuntimeVersion="v4.0" managedPipelineMode="Integrated" />
    </applicationPools>

    修改後執行 iisreset 生效。

    1. 上一篇文章:
    2. 下一篇文章:
    Copyright © 程式碼之家 All Rights Reserved