雖然現代開發推薦 Docker/Laravel Sail/WSL2,但在 Windows 原生環境手動配置 Apache+PHP+MySQL 仍有助於理解底層整合原理。本文記錄 Win7 64 位旗艦版下的完整安裝配置過程。
| 元件 | 版本/檔案 | 安裝路徑 |
| PHP | php-5.6.3-Win32-VC11-x64.zip | D:\devsoft\apm\php-5.6.3-Win32-VC11-x64 |
| Apache | httpd-2.4.10-win64-VC11.zip | D:\devsoft\apm\httpd-2.4.10-win64-VC11\Apache24 |
| MySQL | mysql-5.6.22-winx64.zip | D:\devsoft\apm\mysql-5.6.22-winx64 |
| Web 根目錄 | - | D:\config_web\php_web_sum\php_web |
| Session/Upload/Log | - | D:\config_web\session_home, upload_home, log |
1. PHP 配置 (php.ini)
複製 php.ini-production 為 php.ini,關鍵修改:
; 隱藏版本
expose_php = Off
; 擴充目錄
extension_dir = "D:\devsoft\apm\php-5.6.3-Win32-VC11-x64\ext"
; 啟用常用擴充
extension=php_curl.dll
extension=php_gd2.dll
extension=php_mbstring.dll
extension=php_mysql.dll
extension=php_pdo_mysql.dll
extension=php_xmlrpc.dll
; 時區
date.timezone = Asia/Shanghai
; Session/Upload 目錄
session.save_path = "D:\config_web\session_home"
upload_tmp_dir = "D:\config_web\upload_home"
; 禁用危險函式 (開發環境可放寬)
disable_functions = phpinfo,exec,passthru,popen,proc_open,shell_exec,system,assert,chroot,getcwd,scandir,unlink,delete,rmdir,rename,chgrp,chmod,chown,fopen,copy,mkdir,file,file_get_contents,fputs,fwrite,dir
2. Apache 配置 (httpd.conf)
# 根目錄
ServerRoot "D:\devsoft\apm\httpd-2.4.10-win64-VC11\Apache24"
# 載入 PHP 模組 (VC11 版本必須匹配)
LoadModule php5_module "D:\devsoft\apm\php-5.6.3-Win32-VC11-x64\php5apache2_4.dll"
PHPIniDir "D:\devsoft\apm\php-5.6.3-Win32-VC11-x64"
AddType application/x-httpd-php .php .html .htm
# URL 重寫
LoadModule rewrite_module modules/mod_rewrite.so
# 埠與域名
ServerName localhost:80
Listen 80
# 文件根目錄與權限
DocumentRoot "D:\config_web\php_web_sum\php_web"
# open_basedir 限制訪問範圍
php_admin_value open_basedir "D:\config_web\php_web_sum\php_web\;D:\config_web\log\;D:\config_web\upload_home\;D:\config_web\session_home\;D:\config_web\upload_home_tmp\"
Options FollowSymLinks
AllowOverride All
Require all granted
# 預設文件
DirectoryIndex index.php index.html
# 日誌分割 (rotatelogs)
ErrorLog "|D:/devsoft/apm/httpd-2.4.10-win64-VC11/Apache24/bin/rotatelogs.exe logs/error_%Y%m%d.log 5M 86400 +480"
CustomLog "|D:/devsoft/apm/httpd-2.4.10-win64-VC11/Apache24/bin/rotatelogs.exe logs/access_%Y%m%d.log 5M 86400 +480" common
# 隱藏版本
ServerSignature Off
ServerTokens Prod
# 禁用危險副檔名
Order allow,deny
Deny from all
# PHP 錯誤日誌
php_value error_log "D:\config_web\log\php_errors.log"
Order allow,deny
Deny from all
Satisfy All
# 簡單 Rewrite 測試
RewriteEngine on
RewriteRule ^(.*).html$ /$1.php
3. MySQL 配置 (my.ini)
複製 my-default.ini 為 my.ini:
[mysqld]
basedir=D:\devsoft\apm\mysql-5.6.22-winx64
datadir=D:\devsoft\apm\mysql-5.6.22-winx64\data
explicit_defaults_for_timestamp=TRUE
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
character-set-server=utf8
[mysql]
default-character-set=utf8
4. 服務安裝與啟動
# Apache 安裝為服務
httpd.exe -k install -n "Apache2.4"
# 啟動
httpd.exe -k start -n "Apache2.4"
# MySQL 初始化 (5.6 無需手動初始化 data 目錄)
# 安裝服務
mysqld --install MySQL56
# 啟動
net start MySQL56
# 設定 root 密碼
mysqladmin -u root password "newpass"
5. 常見問題排查
| 問題 | 解決 |
Apache 啟動失敗:缺少 vcruntime140.dll / msvcp140.dll | 安裝 Visual C++ Redistributable for VS 2015-2022 (x64) |
Apache 啟動失敗:缺少 libssh2.dll | 將 PHP 目錄下的 libssh2.dll 複製至 C:\Windows\SysWOW64 (或系統 PATH 目錄) |
| PHP 無法載入 mysql 擴充 | 確認 php_mysql.dll 存在、extension_dir 正確、VC 版本匹配 (VC11)、重啟 Apache |
| MySQL 連線失敗 | 檢查 bind-address、防火牆 3306 埠、root 密碼、skip-grant-tables 重設密碼 |
| 中文亂碼 | 資料庫/表/連線皆設 utf8 (或 utf8mb4)、PHP header('Content-Type: text/html; charset=utf-8') |
6. 驗證測試
# 瀏覽器訪問
https://localhost/ → Apache It works!
https://localhost/phpinfo.php → PHP 版本、模組、配置
# phpinfo.php 內容
現代化替代方案建議
- Docker:
docker-compose up -d 一鍵啟動標準化環境,支援多版本切換、生產一致性。
- Laravel Sail / Laravel Valet (Windows 用 WSL2):零配置開發環境。
- XAMPP / WampServer / phpStudy:圖形化整合包,適合快速上手、不想手動配置。
- PHP 內建伺服器:
php -S localhost:8000 -t public 臨時測試單腳本。
手動配置雖繁瑣,但能深入理解 Web 伺服器、PHP SAPI、資料庫連線、權限控制、日誌管理等底層細節。生產環境強烈建議 Linux + Nginx + PHP-FPM + MySQL/PostgreSQL + Docker/K8s 編排。
- 上一篇文章: Laravel 服務容器延遲載入與 Auth 擴展陷阱:$defer 屬性導致注入失效的根因與解決
- 下一篇文章: PHP 單引號與雙引號差異深度解析:變數解析、效能、最佳實踐
Copyright ©
程式碼之家 All Rights Reserved