在 Windows Server 2003 上手工部署 Apache 2.2 + PHP 5.2 + MySQL 5.0 環境,雖然現在極少見,但維護舊系統時仍會遇到。本文記錄實戰中踩過的 9 個坑及解決方案,作為遺產系統運維的參考檔案。
現象:Apache 啟動報錯「找不到 php5ts.dll」或 PHP 模塊加載失敗。
解決:將 PHP 目錄下的 php5ts.dll 和 libmysql.dll **複製到 C:\Windows\System32\** (或 C:\Windows\)。雖然可通過 PATH 環境變量指向 PHP 目錄,但進 System32 最穩妥、兼容性最好 (尤其舊版 PHP)。
現象:phpinfo() 顯示 Configuration File Path 為 C:\Windows,但實際讀取的是 PHP 目錄下的 ini,配置不生效。
解決:
php.ini-dist 重命名為 php.ini 留在 PHP 目錄 (如 C:\PHP\php.ini)httpd.conf 中添加:PHPIniDir "C:/PHP/" (注意斜槓方向、結尾斜槓、引號)現象:訪問網站根目錄返回 403。
解決:修改 httpd.conf 中 DocumentRoot 指向實際站點目錄 (如 I:/blog),並確保該目錄及父目錄對 **Apache 運行用戶 (通常是 SYSTEM 或指定服務帳戶) 有讀取/執行權限**。
關鍵配置段:
Options Indexes FollowSymLinks AllowOverride All Order allow,deny Allow from all
現象:URL 重寫、防盜鏈、認證等 .htaccess 規則完全不生效。
解決:在 httpd.conf 對應 Directory 塊中設置:AllowOverride All (或至少 AllowOverride FileInfo)
默認是 AllowOverride None,會忽略 .htaccess。
現象:登錄 phpMyAdmin 提示「配置文件需要一個 blowfish_secret 密碼」。
解決:複製 config.sample.inc.php 為 config.inc.php,設置:$cfg['blowfish_secret'] = 'dfdf877ddff'; // 任意 32 位隨機字符串
現象:用 https://localhost/phpmyadmin 正常,用 https://domain.com/phpmyadmin 報 1045 (Access denied)。
根因:MySQL 用戶 root@localhost 僅允許本地連接,域名解析到本機 IP 但 MySQL 判定為遠程連接 (非 localhost / 127.0.0.1),匹配 root@% 或 root@domain.com,而這些用戶不存在或密碼不同。
解決:
root@'%' 用戶並授權 (不安全,僅測試用)127.0.0.1 連接 MySQL:$cfg['Servers'][$i]['host'] = '127.0.0.1';現象:phpMyAdmin 頂部黃條提示「無法載入 mcrypt 擴展」。
解決 (若業務需要 mcrypt):
1. php.ini 中取消註釋 extension=php_mcrypt.dll
2. 將 PHP 目錄下的 libmcrypt.dll 複製到 C:\Windows\System32\
3. 重啟 Apache
注意:PHP 7.2+ 已移除 mcrypt,改用 OpenSSL/Sodium,舊項目遷移時需重構加密邏輯。
解決:在 httpd.conf 中找到 #LoadModule rewrite_module modules/mod_rewrite.so,**刪除行首 #**,重啟 Apache。
鐵律:任何修改 httpd.conf、php.ini、my.ini 後,**必須重啟對應服務** (Apache/MySQL) 配置才生效。.htaccess 除外 (運行時讀取)。
Windows 2003 + Apache + PHP 5.2 是一代經典組合的謝幕之作。維護它時,請帶著敬畏之心——那些年我們踩過的坑,就是今天穩定運行的基石。