雖然有 XAMPP、WampServer 等整合包,但手動搭建能深度理解組件交互、精確控制版本、避免整合包臃腫與版本鎖定。本文提供生產級手動部署全流程。
| 組件 | 建議版本 | 下載來源 |
|---|---|---|
| Apache | 2.4.x (VC15) | Apache Lounge |
| PHP | 8.1+ (VS16, Thread Safe) | PHP for Windows |
| MySQL | 8.0+ (Community) | MySQL 官網 |
| VC++ Redistributable | VS2015-2022 (x64) | Microsoft 官網 |
關鍵: Apache、PHP 編譯器版本必須一致(VC15/VS16),Thread Safe 版本用於 Apache 模組模式。
D:\dev\
├── Apache24\
├── PHP81\
├── MySQL80\
├── wwwroot\ # 網站根目錄
└── logs\ # 統一日誌目錄
下載並安裝 vc_redist.x64.exe,否則 Apache/PHP 啟動報 VCRUNTIME140.dll not found。
D:\dev\Apache24conf/httpd.conf 關鍵修改:# 1. 服務器根目錄
Define SRVROOT "D:/dev/Apache24"
ServerRoot "${SRVROOT}"
# 2. 監聽埠
Listen 80
# 3. 載入模組(按需啟用)
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule headers_module modules/mod_headers.so
LoadModule expires_module modules/mod_expires.so
LoadModule deflate_module modules/mod_deflate.so
LoadModule ssl_module modules/mod_ssl.so
# 4. 網站根目錄
DocumentRoot "D:/dev/wwwroot"
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
# 5. 目錄索引
DirectoryIndex index.php index.html index.htm
# 6. PHP 模組整合(關鍵)
LoadModule php_module "D:/dev/PHP81/php8apache2_4.dll"
PHPIniDir "D:/dev/PHP81"
AddType application/x-httpd-php .php .php7 .phtml
AddType application/x-httpd-php-source .phps
# 7. 日誌
ErrorLog "D:/dev/logs/apache_error.log"
CustomLog "D:/dev/logs/apache_access.log" combined
D:\dev\Apache24\bin\httpd.exe -tD:\dev\Apache24\bin\httpd.exe -k install -n "Apache24"net start Apache24 或 httpd -k startD:\dev\PHP81php.ini-development 為 php.iniphp.ini 關鍵配置:; 1. 擴展目錄
extension_dir = "D:/dev/PHP81/ext"
; 2. 啟用核心擴展(去掉分號)
extension=curl
extension=gd
extension=mbstring
extension=mysqli
extension=pdo_mysql
extension=openssl
extension=zip
extension=intl
extension=fileinfo
extension=redis ; 需額外下載 dll
extension=xdebug ; 開發環境建議
; 3. 錯誤報告
display_errors = On
display_startup_errors = On
error_reporting = E_ALL
log_errors = On
error_log = "D:/dev/logs/php_error.log"
; 4. 時區
date.timezone = Asia/Shanghai
; 5. 上傳限制
file_uploads = On
upload_max_filesize = 50M
post_max_size = 60M
; 6. Session
session.save_handler = files
session.save_path = "D:/dev/tmp/session"
; 7. OPcache(開發環境關閉,生產開啟)
opcache.enable = 0
; 8. Xdebug 3 配置
[xdebug]
zend_extension = "D:/dev/PHP81/ext/php_xdebug.dll"
xdebug.mode = develop,debug
xdebug.start_with_request = yes
xdebug.client_port = 9003
xdebug.client_host = 127.0.0.1
D:\dev\tmp\session 目錄,確保寫入權限D:\dev\PHP81 加入系統 PATH 環境變數php -v、php -mD:\dev\MySQL80MySQL80,開機自啟my.ini 優化配置:[mysqld]
basedir = D:/dev/MySQL80
datadir = D:/dev/MySQL80/data
port = 3306
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
default-storage-engine = INNODB
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
# 開發環境適度配置
innodb_buffer_pool_size = 512M
innodb_log_file_size = 128M
innodb_flush_log_at_trx_commit = 2
max_connections = 200
tmp_table_size = 64M
max_heap_table_size = 64M
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
net start MySQL80mysql -u root -pD:\dev\wwwroot\info.php:<?php phpinfo(); ?>https://localhost/info.php,確認:db_test.php 驗證資料庫連線:<?php
$mysqli = new mysqli('127.0.0.1', 'root', 'your_password', 'mysql');
if ($mysqli->connect_errno) {
die('Connect failed: ' . $mysqli->connect_error);
}
echo 'MySQL 連線成功!版本: ' . $mysqli->server_info;
$mysqli->close();
# httpd-vhosts.conf
ServerName project1.local
DocumentRoot "D:/dev/wwwroot/project1/public"
AllowOverride All
Require all granted
ErrorLog "D:/dev/logs/project1_error.log"
CustomLog "D:/dev/logs/project1_access.log" combined
ServerName project2.local
DocumentRoot "D:/dev/wwwroot/project2/public"
...
編輯 C:\Windows\System32\drivers\etc\hosts:
127.0.0.1 project1.local
127.0.0.1 project2.local
# 下載 composer.phar 至 D:\dev\PHP81
# 建立 composer.bat
@echo off
php D:\dev\PHP81\composer.phar %*
將 D:\dev\PHP81 加入 PATH,命令列直接使用 composer。
D:\dev\PHP81\php.exeD:/dev/wwwroot ↔ /var/www/html(容器場景)| 現象 | 原因 | 解決 |
|---|---|---|
| Apache 啟動即退出 | 埠佔用 / 配置錯誤 / 缺少 DLL | httpd -t 檢查、netstat -ano | findstr :80、Dependency Walker 檢查 DLL |
| PHP 模組載入失敗 | VC++ 版本不匹配 / TS/NTS 混用 | 確認 Apache/PHP 同為 VC15/VS16 + Thread Safe |
| MySQL 連線失敗 | 服務未啟動 / 埠錯誤 / 防火牆 / 認證插件 | net start MySQL80、檢查 3306、ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'pwd' |
| .htaccess 不生效 | AllowOverride None | httpd.conf 設 AllowOverride All |
| 中文亂碼 | 字符集不一致 | PHP/MySQL/HTML/資料庫表統一 utf8mb4 |
[ ] php.ini: display_errors=Off, opcache.enable=1, opcache.jit=1255 [ ] Apache: MPM Event, mod_cache/mod_deflate, SSL/TLS, 安全標頭 [ ] MySQL: innodb_flush_log_at_trx_commit=1, 只讀副本, 備份策略 [ ] PHP-FPM 替代 mod_php (高併發場景) [ ] 容器化部署
手動搭建 WAMP 雖初期投入較大,但賦予你對運行環境的完全掌控力,是進階 PHP 工程師向架構師邁進的必修課。建議將配置檔納入版本控制,構建專屬的標準化開發環境規格。