| 維度 | ISAPI (php5isapi.dll) | FastCGI (fcgiext.dll) |
|---|---|---|
| 匿名存取執行身分 | IUSR_機器名 (低權限) | Network Service (較高權限) |
| 穩定性 | 進程內載入,崩潰影響 IIS | 進程外獨立,崩潰不波及 IIS |
| 效能 | 略快 (舊版) | 更佳 (進程重用、連線池) |
| 多站點隔離 | 難以區分身分 | 可為每站點指定不同應用程式集區身分 |
| 建議 | 不推薦 | 強烈推薦 |
關鍵風險: ISAPI 模式下 PHP 以 IUSR 身分執行,若目錄權限設錯 (給 IUSR 寫入),木馬極易植入。FastCGI 以 Network Service 執行,配合集區隔離,安全性大幅提升。
切勿所有站點共用同一身分。FastCGI 模式下,為每站點建立獨立應用程式集區,集區「身分」分頁設定專用帳號 (或保持 Network Service 但靠 NTFS ACL 隔離),實現權限邊界。
C:\PHP。php.ini-recommended 為 php.ini,調整關鍵設定:cgi.force_redirect = 0 fastcgi.impersonate = 1 cgi.fix_pathinfo = 1 extension_dir = "C:\PHP\ext" ; 啟用常用擴充 extension=php_mysql.dll extension=php_mysqli.dll extension=php_gd2.dll extension=php_mbstring.dll extension=php_xml.dll
.php → 執行檔:C:\WINDOWS\system32\inetsrv\fcgiext.dll → 動詞:全部 → ☑ 指令碼引擎 → ☑ 檢查檔案存在C:\WINDOWS\system32\inetsrv\fcgiext.ini:[Types] php=PHP-All [PHP-All] ExePath=C:\PHP\php-cgi.exe InstanceMaxRequests=10000 EnvironmentVars=PHP_FCGI_MAX_REQUESTS:10000 ; 多站點隔離範例 ; [Site1-PHP] ; ExePath=C:\PHP\php-cgi.exe ; InstanceMaxRequests=10000
同樣在「應用程式對應」新增 .htm → 執行檔 fcgiext.dll → fcgiext.ini 加入 htm=PHP-All。即時生效,無需重啟。
原因: PHP 內部編碼 UTF-8,Windows 檔案系統預設 Big5/ANSI,中文檔名轉碼失敗。
修正程式碼:
// 原始 (失敗) move_uploaded_file($file['tmp_name'], $dir . basename($file['name'])); // 修正 (轉碼) move_uploaded_file($file['tmp_name'], $dir . basename(mb_convert_encoding($file['name'], 'big5', 'utf-8')));
或統一採用 UTF-8 檔案系統 (Windows Server 2008+ 支援較好),並設定 PHP internal_encoding = UTF-8。
Linux 下預設 Asia/Taipei,移植 Windows 後變 GMT+0。
解決: 系統環境變數新增 TZ = Asia/Taipei (或 Asia/Shanghai) → 執行 iisreset 生效。
時區對照表:zone.txt
| 路徑 | 帳號 | 權限 |
|---|---|---|
| PHP 安裝目錄 (C:\PHP) | Network Service | 讀取/執行 |
| PHP 安裝目錄下 tmp/session | Network Service | 讀取/執行 + 寫入 |
| 網站根目錄 (WWWROOT) | IUSR_機器名 | 讀取/執行 |
| 網站 .php 檔案 | IUSR_機器名 | 讀取/執行 |
嚴禁 給 IUSR 任何寫入權限;Network Service 僅需 PHP 目錄與暫存目錄權限。
php.ini 先全部註解 extension=,確認 phpinfo() 正常顯示後,**逐一啟用**擴充。若某擴充有誤 (如缺少依賴 DLL),錯誤訊息框會彈出在無人看管的 Session 0,導致 PHP 掛起無法恢復,極難排查。
IIS 6.0 跑 PHP 5,**FastCGI + NTS 版 + 集區隔離 + 最小權限 + 環境變數時區** 是生產環境黃金組合。拒絕 ISAPI、拒絕共用身分、拒絕一次啟用所有擴充,方能穩定、安全、可維護。