整合包雖然方便,但版本鎖定、元件耦合、升級困難、安全更新滯後。手動安裝可自由組合版本 (如 PHP 8.3 + MySQL 8.0 + Apache 2.4),且利於理解各元件運作原理。
| 元件 | 建議版本 | 下載來源 |
|---|---|---|
| Apache | 2.4.59 (VC15) | Apache Lounge (官方不提供 Windows binary) |
| PHP | 8.3.10 (NTS, VS16) | windows.php.net |
| MySQL | 8.0.39 (Community) | MySQL 官網 |
| Visual C++ Redistributable | VC15 (2015-2022) | Microsoft |
關鍵:PHP 必須選 NTS (Non Thread Safe) 版,搭配 Apache mod_fcgid 或 mod_proxy_fcgi (FastCGI) 運行,效能與穩定度優於舊式 mod_php (TS)。
雙擊執行 vc_redist.x64.exe,缺少會導致 Apache/PHP/MySQL 啟動報 VCRUNTIME140.dll not found。
httpd-2.4.59-win64-VC15.zip 至 C:\Apache24。C:\Apache24\conf\httpd.conf:
Define SRVROOT "C:/Apache24" (確認路徑正確,用正斜線)。ServerName localhost:80 (取消註解)。DocumentRoot "C:/Workspace/PHP" (你的專案根目錄)。<Directory "C:/Workspace/PHP"> 對應修改。LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
LoadModule rewrite_module modules/mod_rewrite.so
# PHP-FPM via mod_proxy_fcgi
ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/C:/Workspace/PHP/$1
DirectoryIndex index.php index.html
C:\Apache24\bin\httpd.exe -t → Syntax OK。C:\Apache24\bin\httpd.exe -k install -n "Apache24",啟動服務。php-8.3.10-nts-Win32-vs16-x64.zip 至 C:\PHP83。php.ini-development 為 php.ini。php.ini 關鍵設定:
extension_dir = "C:/PHP83/ext"
date.timezone = Asia/Taipei
; 啟用常用擴充套件
extension=curl
extension=gd
extension=mbstring
extension=mysqli
extension=pdo_mysql
extension=openssl
extension=fileinfo
extension=intl
extension=zip
; 生產環境建議
expose_php = Off
display_errors = Off
log_errors = On
error_log = "C:/PHP83/logs/php_error.log"
upload_max_filesize = 20M
post_max_size = 20M
max_execution_time = 60
memory_limit = 256M
mkdir C:\PHP83\logs。C:\PHP83\php-cgi.exe -b 127.0.0.1:9000 -c C:\PHP83\php.iniC:\PHP83\php.exe -v。mysql-8.0.39-winx64.msi,選 Custom 安裝至 C:\MySQL80。developer 用戶。C:\ProgramData\MySQL\MySQL Server 8.0\my.ini (隱藏檔案):
[mysqld]
default_authentication_plugin=caching_sha2_password
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
max_connections=200
innodb_buffer_pool_size=1G
net start mysql80。在 C:\Workspace\PHP\index.php 建立:
<?php
phpinfo();
$pdo = new PDO('mysql:host=127.0.0.1;dbname=mysql', 'root', 'your_password');
echo "PDO MySQL: " . ($pdo ? 'Connected' : 'Failed');
瀏覽 https://localhost/ 應顯示 PHP 資訊頁且 PDO 連線成功。
| 現象 | 原因 | 解決 |
|---|---|---|
| Apache 啟動即閃退 | 端口 80 被佔用 (IIS, Skype) | netstat -ano | findstr :80 找 PID 結束,或改 Apache 聽 8080 |
| PHP-FPM 連線失敗 (502/503) | PHP-CGI 未啟動、端口 9000 防火牆、路徑錯誤 | 檢查 tasklist | findstr php-cgi、防火牆開放 9000、ProxyPassMatch 路徑大小寫 |
| MySQL 連線被拒 | skip-networking、bind-address、防火牆 3306 | my.ini 確認 bind-address=0.0.0.0、防火牆開放 |
| 中文亂碼 | 資料庫/表/連線編碼不一致 | 全鏈路 utf8mb4:my.ini、PDO DSN charset=utf8mb4、HTML <meta charset="utf-8"> |
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" && php composer-setup.php --install-dir=C:\PHP83 --filename=composer.batphp_xdebug-3.3.1-8.3-nts-vs16-x64.dll 放入 ext,php.ini 加 zend_extension=xdebug、xdebug.mode=debug、xdebug.client_port=9003。完整自動化安裝 PowerShell 腳本見 GitHub。