在 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)。
以管理員身分開啟「命令提示字元」,執行:
cscript %SYSTEMDRIVE%\inetpub\adminscripts\adsutil.vbs SET W3SVC/AppPools/Enable32bitAppOnWin64 1
說明:%SYSTEMDRIVE% 通常為 C:。若系統盤不同,請替換實際路徑(如 D:)。執行成功會顯示 Enable32bitAppOnWin64 : (BOOLEAN) True。
啟用 32 位模式後,ASP.NET ISAPI 篩選器可能未正確註冊,導致應用程式池啟動失敗。執行:
%SYSTEMROOT%\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -i
關鍵點:
%SYSTEMROOT% 通常為 C:\Windows。aspnet_regiis.exe,對應 32 位模式。v1.1.4322、v2.0.50727、v4.0.30319 等。建議優先嘗試最高安裝版本。inetmgr,選擇網站對應的應用程式池。*.phpFastCgiModuleC:\PHP\php-cgi.exe (實際 PHP 安裝路徑)PHP via FastCGI; 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 Win32 | PHP 為 64 位版本,但應用程式池啟用 32 位 | 下載對應位數 PHP,或關閉應用程式池 32 位模式 |
| 503 Service Unavailable | 應用程式池啟動即崩潰 | 檢查事件檢視器 → System/Application 日誌;執行步驟 2 重註冊 ASP.NET |
| 404 / 500.19 | Handler Mapping 路徑錯誤、權限不足 | 確認 php-cgi.exe 實際路徑、IIS_IUSRS 讀取/執行權限 |
| No input file specified | cgi.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 位) 與應用程式池模式一致。
若腳本執行受限,可直接編輯 C:\Windows\System32\inetsrv\config\applicationHost.config:
<applicationPools>
<add name="DefaultAppPool" enable32BitAppOnWin64="true" managedRuntimeVersion="v4.0" managedPipelineMode="Integrated" />
</applicationPools>
修改後執行 iisreset 生效。