雖然生產環境首選 Linux + 容器化,但 Windows 本地開發、教學演示、小型內網應用仍大量存在。本文記錄 **Apache 2.0 + PHP 5.0 + MySQL 4.0 + Tomcat 5.0 + phpMyAdmin 2.6** 在 Windows 上的整合部署全過程,涵蓋版本選擇、安裝順序、配置文件關鍵點、模組加載、驗證測試,並給出現代版本對應升級建議。
| 組件 | 文中版本 | 現代建議 (2024+) | 下載來源 |
|---|---|---|---|
| Apache | 2.0.52 | 2.4.58+ (Apache Lounge 編譯版) | https://www.apachelounge.com/download/ |
| PHP | 5.0.2 | 8.3.x (Non Thread Safe + Apache 模組) 或 8.3.x (TS + php-fpm) | https://windows.php.net/download/ |
| MySQL | 4.0.22 | 8.0.36+ / MariaDB 10.11+ | https://dev.mysql.com/downloads/mysql/ |
| Tomcat | 5.0.29 | 10.1.x (Servlet 6.0 / JSP 3.1) | https://tomcat.apache.org/download-10.cgi |
| JDK | 1.4.1 | 21 LTS (Eclipse Temurin / Microsoft Build of OpenJDK) | https://adoptium.net/ |
| 連接器 | mod_jk 1.2.6 | mod_proxy_ajp / mod_proxy_http (原生模組,無需編譯) | Apache 內建 |
| JDBC 驅動 | mm.mysql 2.0.4 | MySQL Connector/J 8.3+ | https://dev.mysql.com/downloads/connector/j/ |
| phpMyAdmin | 2.6.0-pl2 | 5.2.1+ | https://www.phpmyadmin.net/downloads/ |
# 安裝路徑假設:D:/usr/apache2
# 關鍵配置項:
ServerRoot "D:/usr/apache2"
ServerAdmin admin@example.com
Listen 80
ServerName localhost:80
DocumentRoot "D:/usr/www"
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
DirectoryIndex index.html index.htm index.php index.php3 index.phtml
ScriptAlias /cgi-bin/ "D:/usr/apache2/cgi-bin/"
# PHP 解壓至 D:/usr/PHP5
# 1. 複製 php.ini-development → php.ini
# 2. php.ini 關鍵修改:
doc_root = "D:/usr/www"
extension_dir = "D:/usr/PHP5/ext"
include_path = "D:/usr/PHP5/includes"
extension=php_mysql.dll ; 取消註釋
extension=php_mysqli.dll ; 現代推薦 mysqli
extension=php_pdo_mysql.dll ; PDO
; 複製 libmysql.dll 到 Apache bin 目錄或系統 PATH (PHP 5.x 需求,7+ 內建)
# 3. httpd.conf 末尾添加 PHP 模組加載 (Apache 2.0/2.2 風格):
LoadFile "D:/usr/PHP5/php5ts.dll"
LoadModule php5_module "D:/usr/PHP5/php5apache2.dll"
PHPIniDir "D:/usr/PHP5"
AddType application/x-httpd-php .php .php3 .php4 .phtml
AddType application/x-httpd-php-source .phps
# 現代 Apache 2.4 + PHP 8.3 (Handler 模式):
# LoadModule php_module "D:/usr/php/php8apache2_4.dll"
# PHPIniDir "D:/usr/php"
# AddType application/x-httpd-php .php
# SetHandler application/x-httpd-php
MySQL80,開機自啟mysql_secure_installation (或向導已含):mysql -u root -p -e "SELECT VERSION();"棄用 mod_jk (編譯困難、版本綁定)**,改用 Apache 原生 mod_proxy_ajp / mod_proxy_http:
# httpd.conf 載入模組 (Apache 2.4 默認已編譯)
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
# 虛擬主機/場所代理到 Tomcat (AJP 協議,需 Tomcat server.xml 啟用 8009)
ProxyPass ajp://localhost:8009/
ProxyPassReverse ajp://localhost:8009/
# 或 HTTP 代理 (Tomcat 默認 8080)
ProxyPass https://localhost:8080/
ProxyPassReverse https://localhost:8080/
Tomcat server.xml 確保:
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> (AJP)
<Connector port="8080" protocol="HTTP/1.1" /> (HTTP)
D:/usr/www/phpmyadminconfig.sample.inc.php → config.inc.php,關鍵配置:
$cfg['blowfish_secret'] = 'your_32_chars_random_string_here'; // Cookie 加密密鑰
$cfg['Servers'][$i]['host'] = '127.0.0.1';
$cfg['Servers'][$i]['port'] = '3306';
$cfg['Servers'][$i]['auth_type'] = 'cookie'; // 強制 Cookie 認證,不存明文密碼
$cfg['Servers'][$i]['compress'] = true;
$cfg['Servers'][$i]['AllowNoPassword'] = false;
Alias /phpmyadmin "D:/usr/www/phpmyadmin"<Directory "D:/usr/www/phpmyadmin"> Require ip 127.0.0.1 ::1 192.168.1.0/24 </Directory> (僅內網訪問)https://localhost/phpmyadmin 驗證| 組件 | 驗證命令/URL | 成功標誌 |
|---|---|---|
| Apache | https://localhost/ | It works! / index.html 內容 |
| PHP | https://localhost/test.php () | PHP Version 8.3.x、Loaded Modules 含 apache2handler、MySQLi/PDO 支持 |
| MySQL | mysql -u root -p -e "STATUS;" | Server version、Protocol、Connection、Uptime 正常 |
| Tomcat | https://localhost:8080/ | Tomcat 首頁、Manager App 可登錄 |
| Java App | https://localhost/java/your-app | JSP/Servlet 正常響應 |
| phpMyAdmin | https://localhost/phpmyadmin | 登錄頁、登錄後可管理庫表 |
| 現象 | 原因 | 對策 |
|---|---|---|
PHP 提示 Unable to load dynamic library 'php_mysql.dll' | 缺少 libmysql.dll 或版本不匹配 | PHP 7+ 內建 mysqlnd,無需外部 dll;PHP 5.x 複製 libmysql.dll 到 Apache bin 目錄 |
Apache 啟動報錯 Cannot load php5apache2.dll | VC++ 運行庫缺失 / PHP 與 Apache 版本/線程模型不匹配 (TS vs NTS) | 安裝 VC++ Redist (VS2015-2022);確保 PHP 為 Thread Safe 版匹配 Apache |
MySQL 連接報錯 Authentication plugin 'caching_sha2_password' not loaded | PHP 驅動版本過低不支持 MySQL 8 默認插件 | 升級 PHP/驅動;或 ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'pwd'; |
| Tomcat 中文亂碼 | URI 編碼不一致 | server.xml <Connector ... URIEncoding="UTF-8" /> |
| phpMyAdmin 提示「配置文件權限不正確」 | Windows 權限檢查誤報 | 確保 config.inc.php 僅 Administrators/SYSTEM 可寫,忽略提示或設置 $cfg['CheckConfigurationPermissions'] = false; |
Windows 一體化部署的核心難點在於 **版本兼容性矩陣 (Apache/PHP/VC++/TS-NTS)、模組加載路徑、字符集統一、端口衝突、權限隔離** 掌握「先裝數據庫 → 再裝 Web 服務器 → 最後裝語言運行時/管理工具」的順序,配合現代化組件選型 (mod_proxy 替代 mod_jk、php-fpm 替代 mod_php、utf8mb4 全鏈路),即可構建穩定可用的本地全棧環境。