環境與版本基線
| 元件 | 版本/路徑 |
| 作業系統 | Windows 2000 Server / Professional |
| Web 伺服器 | IIS 5.0 (內建) |
| PHP | 4.x 系列 (官方 Win32 二進制包) |
| 整合模式 | ISAPI (php4isapi.dll) |
步驟 1:取得並部署 PHP 核心檔案
- 下載:
https://www.onlinedown.net/soft/1774.htm (歷史鏡像,現建議 官方檔案館)
- 解壓至
C:\php (建議路徑,避免空格/中文)
- 複製 DLL 至系統目錄:
來源:C:\php\dlls\*.dll
目標:C:\WINNT\system32\
來源:C:\php\php4ts.dll
目標:C:\WINNT\system32\
# 原則:目標目錄已存在同名檔案則**勿覆蓋**
步驟 2:建立並調整 php.ini
- 開啟
C:\php\php.ini-dist (記事本)
- 修改擴充套件目錄:
; 原:
extension_dir = "./"
; 改:
extension_dir = C:\php
- 另存為
C:\WINNT\system32\php.ini (注意:存放於 system32,非 Windows 目錄)
路徑說明:Win2K/IIS 5.0 ISAPI 模式下,PHP 進程在系統服務上下文運行,預設搜尋 C:\WINNT\system32\php.ini。若放置 C:\WINNT\php.ini 可能不生效。
步驟 3:IIS 5.0 ISAPI 篩選器註冊 (全域載入 PHP 引擎)
- 控制台 → 管理工具 → Internet 服務管理器
- 展開左側樹 → 預設 Web 站點 → 右鍵 → 內容
- 切換 ISAPI 篩選器 標籤 → 新增
- 填入:
| 欄位 | 值 |
| 篩選器名稱 | php |
| 可執行檔 | C:\php\sapi\php4isapi.dll (確認實際路徑,通常在 sapi/ 子目錄) |
- 確定
步驟 4:應用程式對應 (關聯 .php 副檔名)
- 同「預設 Web 站點內容」視窗 → 主目錄 標籤 → 設定
- 應用程式對應 標籤 → 新增
- 填入:
| 欄位 | 值 |
| 可執行檔 | C:\php\sapi\php4isapi.dll |
| 副檔名 | .php |
| 動詞 | 所有動詞 / GET,HEAD,POST (預設) |
| 腳本引擎 | ✅ 勾選 |
| 檢查檔案是否存在 | ✅ 建議勾選 (安全) |
- 確定 → 確定 → 確定 關閉所有對話框
步驟 5:驗證部署成果
- 在 Web 根目錄 (
C:\Inetpub\wwwroot) 建立 test.php:
<?php phpinfo(); ?>
- 瀏覽器訪問
https://localhost/test.php
- 成功指標:
- 顯示 PHP 4.x 紫色資訊頁
- Server API = ISAPI
- 載入模組區塊顯示預期擴充套件
php.ini 路徑顯示 C:\WINNT\system32\php.ini
常見失敗排查
| 現象 | 原因 | 對策 |
| 瀏覽器下載 .php 不執行 | 應用程式對應遺失 / 可執行檔路徑錯誤 / 未勾選腳本引擎 | 重做步驟 4,逐項核對路徑、副檔名、腳本引擎勾選 |
| HTTP 500 內部錯誤 | php4ts.dll 缺失 / php.ini 路徑錯 / 擴充套件 DLL 版本不符 | 1. 確認 C:\WINNT\system32\php4ts.dll 存在 2. 確認 php.ini 在 C:\WINNT\system32\ 3. 僅啟用 C:\php\ 實際存在的擴充套件 DLL |
| ISAPI 篩選器顯示「向下箭頭」 (未載入) | DLL 路徑錯 / 相依 DLL 缺失 / 權限不足 | 事件檢視器 → 系統日誌 查找 IIS/W3SVC 錯誤,依錯誤碼補充 DLL 或調整權限 |
| 修改 php.ini 不生效 | ISAPI 進程快取配置 | 重啟 IIS:net stop iisadmin /y & net start w3svc 或 IIS 管理器重啟站點 |
安全與效能優化建議
- 禁用危險函數 (php.ini):
disable_functions = exec,passthru,shell_exec,system,proc_open,popen
- 錯誤不顯示細節:
display_errors = Off, log_errors = On, error_log = C:\WINNT\php_error.log
- Session 儲存路徑:
session.save_path = C:\php\sessions (建立目錄,給 IUSR_機器名 寫入權限)
- 上傳暫存目錄:
upload_tmp_dir = C:\php\uploadtmp (同權限處理)
- IUSR_機器名 權限最小化:僅網站目錄讀取、上傳/Session 目錄寫入、系統 DLL 目錄讀取/執行
遷移提示:Win2K/IIS 5.0 → 現代架構
| 現狀 | 現代替代 | 關鍵變化 |
| IIS 5.0 + PHP 4 ISAPI | IIS 10 + PHP 8.x NTS + FastCGI | 進程隔離、OPcache、現代語法、安全支援 |
| 單一 php.ini | 每站點獨立 .user.ini / PHP-FPM 池配置 | 配置隔離、多版本共存 |
| 手動 DLL 部署 | Web Platform Installer / Chocolatey / 容器映像 | 自動化、版本鎖定、可重現 |
總結
Win2K IIS 5.0 配置 PHP 4 ISAPI 核心四步:PHP 核心檔案部署 (含 DLL 進 system32) → php.ini 放入 system32 並設 extension_dir → ISAPI 篩選器註冊 php4isapi.dll → 應用程式對應 .php → php4isapi.dll。雙重註冊 (篩選器 + 對應) 為 IIS 5.0 ISAPI 模式特有設計。驗證 phpinfo() Server API = ISAPI 即完成。此架構支撐了早期大量企業內部系統,遷移時保留「進程隔離、配置隔離、最小權限、自動化部署」核心原則即可。