在 Windows Server 2003 上整合 PHP 與 IIS 時,常遇到 phpinfo() 顯示正常但環境變數(如 PHPRC、PATH)不生效、擴展庫載入失敗、MySQL 連線異常等問題。本文系統梳理故障排查邏輯與解決方案。
瀏覽 phpinfo() 頁面,檢查 Configuration File (php.ini) Path 與 Loaded Configuration File 兩欄位:
C:\Windows → PHP 讀取的是系統目錄下的 php.ini,而非你修改的版本。extension_dir 指向錯誤路徑 → 擴展庫無法載入。PHPIniDir、CLI -c 參數)HKEY_LOCAL_MACHINE\SOFTWARE\PHP\IniFilePathPHPRCC:\Windows)或編譯時 --with-config-file-path 指定路徑原因:讀取的非預期 php.ini,或未完全重啟 IIS。
解決:
PHPRC=C:\php(指向 php.ini 所在目錄)。net stop iisadmin && net start w3svc,單站點重啟無效。phpinfo() 顯示的 Loaded Configuration File 已更新。雙重條件:
php.ini 啟用 extension=php_mysql.dllPATH 包含 libmysql.dll 所在目錄最佳實踐:將 PHP 安裝目錄(如 C:\php)加入系統 PATH,而非複製 libmysql.dll 到 System32(易造成版本衝突、鎖定無法更新)。
根因:ISAPI 以系統服務身份執行,不繼承用戶級環境變數,導致 PHPRC 無法讀取。
解決方案對比:
| 模式 | 環境變數支援 | 檔案部署 | 建議場景 |
|---|---|---|---|
| ISAPI | ❌ 不支援 PHPRC | 需將 dll 複製到系統目錄 | 舊版相容性需求 |
| CGI / FastCGI | ✅ 完整支援 | 無需複製系統目錄 | 推薦:現代標準部署 |
強烈建議遷移至 FastCGI:效能更優、隔離性更好、環境變數完整生效、支援 PHP 進程池管理。
php.ini:extension=php_mysql.dll、extension_dir="C:\php\ext"PATH 包含 C:\php(含 libmysql.dll)iisreset 或 net stop/start)phpinfo() 驗證 mysql 區塊出現,Client API version 顯示正常Windows + IIS + PHP 部署的核心原則:統一配置來源、環境變數系統級設定、FastCGI 取代 ISAPI、擴展依賴走 PATH 而非複製檔案。