注意:本文針對 PHP 5.2 版本(已停止維護超過十年)。現代專案請直接使用官方預編譯二進位檔(windows.php.net)或透過 PHP 原始碼 編譯 PHP 8.x。本文僅供歷史參考、舊系統維護或教學用途。
php-5.2.x-src.zip)bindlib_w32.zip、win32build.zip建立根目錄 C:\php5.2-build,並在其下建立三個子目錄:
C:\php5.2-build\
├── win32build\ <-- 解壓 win32build.zip 到此 (含 bin, include, lib)
├── bindlib_w32\ <-- 解壓 bindlib_w32.zip 到此
└── php-src\ <-- 解壓 PHP 5.2 原始碼到此
bindlib_w32.dsp 或對應專案檔resolv.lib 複製到 C:\php5.2-build\win32build\lib\ 覆蓋原檔setenv /x86 /xp /release
cd C:\php5.2-build\php-src
buildconf
cscript /nologo configure.js --help
cscript /nologo configure.js ^
--enable-object-out-dir="C:\php5.2-build" ^
--with-php-build="C:\php5.2-build\win32build" ^
--disable-all ^
--enable-cli
常用配置選項說明:
| 選項 | 說明 |
|---|---|
--enable-cli | 建置 CLI 執行檔 (php.exe) |
--enable-cgi | 建置 CGI 執行檔 (php-cgi.exe) |
--with-apxs2=<path> | 建置 Apache 2.x 模組 (需 Apache 原始碼/開發套件) |
--with-mysql / --with-mysqli / --with-pdo-mysql | MySQL 支援 (需 MySQL Client Library) |
--with-openssl | OpenSSL 支援 (需 OpenSSL 開發套件) |
--with-gd | GD 圖形庫 (需 GD、libpng、libjpeg、freetype) |
--enable-mbstring | 多位元組字串支援 |
--with-curl | cURL 支援 |
--enable-zip | ZIP 擴展 |
--with-config-file-path=<dir> | 指定 php.ini 搜尋路徑 |
nmake
編譯成功後,輸出檔案位於 C:\php5.2-build\Release_TS\ (Thread Safe 版本) 或 Release\ (Non-Thread Safe),包含:
php.exe - CLI 執行檔php-cgi.exe - CGI/FastCGI 執行檔php5ts.dll - 核心 DLL (TS 版)ext\ - 擴展 DLL (如 php_mysql.dll, php_gd2.dll 等)| 錯誤現象 | 原因與解決 |
|---|---|
fatal error C1083: Cannot open include file: 'libxml.h' |
外部庫路徑未正確設定。確認 win32build\include\libxml2 存在,且 configure.js 偵測正確。 |
LNK2001: unresolved external symbol _xmlFree |
libxml2.lib 未連結。檢查 win32build\lib 是否有正確的 .lib 檔。 |
re2c not found |
掃描器產生器缺失。下載 re2c 二進位檔放入 win32build\bin\。 |
bison/flex not found |
Parser 產生器缺失。從 GnuWin32 安裝 bison、flex,加入 PATH。 |
| 編譯中途停止,記憶體不足 | 關閉其他程式,或在 configure.js 參數加入 --disable-debug 減少符號表大小。 |
C:\php5.2-build\Release_TS\php.exe -v
C:\php5.2-build\Release_TS\php.exe -m
docker pull php:8.3-cli-alpine 或 php:8.3-apache,環境一致、零配置。apt install php8.3 或從原始碼編譯現代版本。choco install php / scoop install php 自動管理版本與擴展。configure.js 參數大幅變更,請參考 官方 Wiki。PHP 5.2 時代的 Windows 編譯流程體現了早期 PHP 於 Windows 平台的艱辛歷程。現代開發者應優先採用官方預編譯版或容器化方案,專注於業務邏輯而非建置工具鏈維護。若確須維護 PHP 5.2 遺留系統,建議將編譯環境封裝為虛擬機映像或 Dockerfile,確保可重現性與隔離性。