Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> 電腦軟體教學 >> 伺服器技術 >> Web 伺服器

IIS 6.0 安裝 PHP 5 完全指南:ISAPI vs FastCGI、權限陷阱、中文檔名、時區修正

編輯:Web 伺服器

核心抉擇:ISAPI 模組 vs FastCGI

維度ISAPI (php5isapi.dll)FastCGI (fcgiext.dll)
匿名存取執行身分IUSR_機器名 (低權限)Network Service (較高權限)
穩定性進程內載入,崩潰影響 IIS進程外獨立,崩潰不波及 IIS
效能略快 (舊版)更佳 (進程重用、連線池)
多站點隔離難以區分身分可為每站點指定不同應用程式集區身分
建議不推薦強烈推薦

關鍵風險: ISAPI 模式下 PHP 以 IUSR 身分執行,若目錄權限設錯 (給 IUSR 寫入),木馬極易植入。FastCGI 以 Network Service 執行,配合集區隔離,安全性大幅提升。

多站點部署:每站點獨立身分隔離

切勿所有站點共用同一身分。FastCGI 模式下,為每站點建立獨立應用程式集區,集區「身分」分頁設定專用帳號 (或保持 Network Service 但靠 NTFS ACL 隔離),實現權限邊界。

FastCGI 實戰安裝步驟

  1. 下載 FastCGI Extension for IIS 6.0 (微軟官方) 安裝。
  2. 下載 PHP 5.x Non Thread Safe (NTS) 版 (zip 封裝),解壓至 C:\PHP。
  3. 複製 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
  1. IIS 管理員 → 網站屬性 → 「主目錄」→「設定」→「對應」→ 新增:
    副檔名:.php → 執行檔:C:\WINDOWS\system32\inetsrv\fcgiext.dll → 動詞:全部 → ☑ 指令碼引擎 → ☑ 檢查檔案存在
  2. 編輯 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
  1. 無需重啟 IIS,儲存 fcgiext.ini 即時生效。

進階技巧:讓 .htm 也執行 PHP

同樣在「應用程式對應」新增 .htm → 執行檔 fcgiext.dll → fcgiext.ini 加入 htm=PHP-All。即時生效,無需重啟。

坑點 1:中文檔名上傳失敗 (move_uploaded_file)

原因: 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。

坑點 2:時區重置為 GMT (格林威治時間)

Linux 下預設 Asia/Taipei,移植 Windows 後變 GMT+0。

解決: 系統環境變數新增 TZ = Asia/Taipei (或 Asia/Shanghai) → 執行 iisreset 生效。
時區對照表:zone.txt

NTFS 權限最小化配置 (安全基線)

路徑帳號權限
PHP 安裝目錄 (C:\PHP)Network Service讀取/執行
PHP 安裝目錄下 tmp/sessionNetwork 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、拒絕共用身分、拒絕一次啟用所有擴充,方能穩定、安全、可維護。

Copyright © Windows教程網 All Rights Reserved