首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

PHP 在 IIS 上部署出現 500 內部服務器錯誤的排查全流程

     編輯:程式設計綜合問答

現象描述

本地 Windows 環境測試正常,發布至 Windows Server 2012 IIS 後訪問報「500 - 內部服務器錯誤」,瀏覽器無具體錯誤信息,僅顯示通用錯誤頁面。

核心原因

IIS 預設關閉詳細錯誤輸出,PHP 錯誤被吞噬,導致無法定位具體腳本異常(如擴展缺失、權限不足、配置錯誤)。

快速開啟詳細錯誤

  1. 打開 IIS 管理器,選中站點,雙擊 錯誤頁面 圖標。
  2. 右側操作欄點擊 編輯功能設置。
  3. 在「錯誤響應」區域勾選 詳細錯誤,確定保存。
  4. 重新訪問頁面,此時將顯示 PHP 具體錯誤行號、堆疊跟踪及錯誤類型。

進階排查清單

  • PHP 版本與擴展:確認 `php.ini` 已啟用所需擴展(如 `php_mysqli.dll`, `php_pdo_sqlsrv.dll`),且版本與 PHP 主版本匹配(TS/Non-TS、x86/x64)。
  • 目錄權限:站點物理路徑需授予 `IIS_IUSRS` 讀取/執行權限;上傳、緩存目錄需寫入權限。
  • FastCGI 設置:IIS 中 FastCGI 模組指向正確的 `php-cgi.exe` 路徑,請求超時、實例最大數根據流量調整。
  • 錯誤日誌:`php.ini` 設定 `log_errors = On`, `error_log = "C:\php_errors.log"`,定期查看。
  • Web.config 重寫規則:若使用 URL Rewrite,確保規則語法正確,避免無限循環導致 500。

常見坑點

開啟詳細錯誤後若顯示「Class 'mysqli' not found」,通常是 `extension_dir` 路徑錯誤或 `php_mysqli.dll` 缺失;若報「Access denied」,檢查匿名用戶身份或應用程序池身份權限。

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