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

Windows 平台下从源码编译 PHP 5.2 完整步骤指南

     編輯:PHP 綜合知識

前言

虽然 PHP 5.2 已停止维护,但在维护极老旧项目时,仍可能需要在 Windows 上自行编译特定版本。本文记录使用 Visual Studio 2008 + Windows SDK 6.1 编译 PHP 5.2 的完整流程,仅供遗留系统维护参考。

准备工作:所需工具与依赖

  1. Visual Studio 2008 (VS2008):编译器环境核心。
  2. Windows SDK 6.1:提供平台头文件、库文件及 setenv 脚本。
  3. PHP 5.2 源码包:从 PHP 官方归档 下载 php-5.2.x-src.zip,暂不解压。
  4. bindlib_w32.zip:DNS 解析库,编译生成 resolv.lib。
  5. win32build.zip:包含编译所需的头文件、库文件、工具链(bin/include/lib)。
  6. 第三方依赖库:从 zlatkovic.com 下载 libxml2、iconv、zlib 等预编译二进制包。

目录结构规划

建议在 C:\ 下创建统一工作目录:

C:\php5.2-mybuild\
├── win32build\      ← 解压 win32build.zip 至此,含 bin/include/lib
├── bindlib_w32\     ← 解压 bindlib_w32.zip 至此
├── php-src\         ← 解压 PHP 5.2 源码至此

编译 bindlib_w32 生成 resolv.lib

  1. 进入 C:\php5.2-mybuild\bindlib_w32 目录。
  2. 使用 VS2008 打开工程文件编译(或按其自带说明操作)。
  3. 将生成的 resolv.lib 复制到 C:\php5.2-mybuild\win32build\lib,覆盖原文件。

配置编译环境变量

  1. 打开 Windows SDK 6.1 Command Shell(开始菜单 → Microsoft Windows SDK v6.1 → CMD Shell)。
  2. 设置 32 位 Release 编译环境:
    setenv /x86 /xp /release
  3. 切换到 PHP 源码目录:
    cd C:\php5.2-mybuild\php-src

生成配置脚本

buildconf

此步会生成 configure.js,用于后续配置编译选项。

查看可用编译选项

cscript /nologo configure.js --help

执行配置(示例:仅编译 CLI 版本,禁用所有扩展)

cscript /nologo configure.js `
  --enable-object-out-dir="C:\php5.2-mybuild" `
  --with-php-build="C:\php5.2-mybuild\win32build" `
  --disable-all --enable-cli
  • --enable-object-out-dir:指定中间文件/输出目录,编译后会生成 Release_TS 子目录。
  • --with-php-build:指向 win32build 目录。
  • --disable-all --enable-cli:最小化编译,仅生成 php.exe。

开始编译

nmake

编译过程可能持续数分钟。成功后,可在 C:\php5.2-mybuild\Release_TS 找到 php.exe、php5ts.dll 等产物。

常见问题排查

  • 缺少头文件/库:检查 win32build 目录结构是否完整,第三方库是否放入对应 include/lib 目录。
  • resolv.lib 报错:确认 bindlib_w32 编译成功并正确覆盖。
  • 内存不足:关闭其他大型程序,或增加虚拟内存。

结语

此流程适用于 PHP 5.2.x 版本。若需编译 PHP 5.3+,工具链需升级至 VS2015+ 且依赖库版本不同,不再适用本文步骤。现代项目强烈建议直接使用官方预编译二进制包或 Docker 环境。

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