首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

Windows 平台從原始碼編譯 PHP 5.2 完整實戰指南

     編輯:PHP 相關知識

注意:本文針對 PHP 5.2 版本(已停止維護超過十年)。現代專案請直接使用官方預編譯二進位檔(windows.php.net)或透過 PHP 原始碼 編譯 PHP 8.x。本文僅供歷史參考、舊系統維護或教學用途。

建置環境需求

  • 作業系統:Windows XP / Server 2003 / Vista / 7(建議在虛擬機中操作)
  • Visual Studio 2008 (VC9) - 必須為 2008 版本,較新版本不相容
  • Windows SDK 6.1
  • PHP 5.2 原始碼 (php-5.2.x-src.zip)
  • bindlib_w32.zip、win32build.zip
  • 外部依賴庫:libxml2、iconv、zlib (從 zlatkovic.com 下載)

目錄結構準備

建立根目錄 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 (DNS 解析庫)

  1. 打開 bindlib_w32.dsp 或對應專案檔
  2. 使用 VS2008 編譯 Release 版本
  3. 產生的 resolv.lib 複製到 C:\php5.2-build\win32build\lib\ 覆蓋原檔

設定建置環境變數

  1. 啟動 Windows SDK 6.1 CMD Shell (開始功能表 → Microsoft Windows SDK v6.1 → CMD Shell)
  2. 執行環境設定指令:
setenv /x86 /xp /release

配置 PHP 建置選項

  1. 切換至原始碼目錄:
cd C:\php5.2-build\php-src
  1. 產生 configure 腳本:
buildconf
  1. 查看所有可用選項:
cscript /nologo configure.js --help
  1. 執行配置(範例:僅啟用 CLI、停用所有擴展、指定輸出目錄):
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-mysqlMySQL 支援 (需 MySQL Client Library)
--with-opensslOpenSSL 支援 (需 OpenSSL 開發套件)
--with-gdGD 圖形庫 (需 GD、libpng、libjpeg、freetype)
--enable-mbstring多位元組字串支援
--with-curlcURL 支援
--enable-zipZIP 擴展
--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

現代替代方案(強烈建議)

  1. 官方預編譯二進位檔:https://windows.php.net/download/ 提供 VC15/VS2017 編譯的 PHP 7.4~8.3,含 Thread Safe / Non-Thread Safe、x86/x64 完整版本。
  2. Docker 容器化:docker pull php:8.3-cli-alpine 或 php:8.3-apache,環境一致、零配置。
  3. WSL 2 (Windows Subsystem for Linux):在 Windows 內原生運行 Linux 發布版,使用 apt install php8.3 或從原始碼編譯現代版本。
  4. Chocolatey / Scoop:choco install php / scoop install php 自動管理版本與擴展。
  5. 自行編譯 PHP 8.x:流程類似但工具鏈更新為 VS2019/2022、Windows SDK 10、configure.js 參數大幅變更,請參考 官方 Wiki。

結語

PHP 5.2 時代的 Windows 編譯流程體現了早期 PHP 於 Windows 平台的艱辛歷程。現代開發者應優先採用官方預編譯版或容器化方案,專注於業務邏輯而非建置工具鏈維護。若確須維護 PHP 5.2 遺留系統,建議將編譯環境封裝為虛擬機映像或 Dockerfile,確保可重現性與隔離性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved