<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <HTML ><HEAD ><TITLE >从源程序编译</TITLE ><META NAME="GENERATOR" CONTENT="Modular DocBook HTML Stylesheet Version 1.79"><LINK REL="HOME" TITLE="PHP 手册" HREF="index.html"><LINK REL="UP" TITLE="Windows 系统下的安装" HREF="install.windows.html"><LINK REL="PREVIOUS" TITLE="Microsoft Windows 下的 Xitami" HREF="install.windows.xitami.html"><LINK REL="NEXT" TITLE="Windows 下安装扩展库" HREF="install.windows.extensions.html"><META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=UTF-8"></HEAD ><BODY CLASS="sect1" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#840084" ALINK="#0000FF" ><DIV CLASS="NAVHEADER" ><TABLE SUMMARY="Header navigation table" WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TH COLSPAN="3" ALIGN="center" >PHP 手册</TH ></TR ><TR ><TD WIDTH="10%" ALIGN="left" VALIGN="bottom" ><A HREF="install.windows.xitami.html" ACCESSKEY="P" >上一页</A ></TD ><TD WIDTH="80%" ALIGN="center" VALIGN="bottom" >章 6. Windows 系统下的安装</TD ><TD WIDTH="10%" ALIGN="right" VALIGN="bottom" ><A HREF="install.windows.extensions.html" ACCESSKEY="N" >下一页</A ></TD ></TR ></TABLE ><HR ALIGN="LEFT" WIDTH="100%"></DIV ><DIV CLASS="sect1" ><H1 CLASS="sect1" ><A NAME="install.windows.building" >从源程序编译</A ></H1 ><P > 本章讲述了在 Windows 下如何使用 Microsoft 的工具编译 PHP。要在 CygWin 中编译 PHP,请参考 <A HREF="install.unix.html" >Unix 系统下的安装</A >一章。 </P ><DIV CLASS="sect2" ><H2 CLASS="sect2" ><A NAME="install.windows.building.requirement" >需求</A ></H2 ><P > 要编译 PHP 需要 Microsoft 开发环境。推荐使用 Microsoft Visuaul C++ 6.0,不过 Visual C++ .NET 版也可以用。自 PHP 5 起也支持免费的 Microsoft .NET toolchain(需要安装 Windows Platform SDK,Visual C++ Toolkit 和 .NET Framework SDK)。 </P ><P > 要释放下载的文件还需要一个 ZIP 文件的解压缩工具。Windows XP 和更新的版本中已经内置了此功能。 </P ><P > 在开始之前,需要先下载: </P ><P ></P ><UL ><LI ><P > PHP 站点中的 win32 编译工具 <A HREF="http://www.php.net/extra/win32build.zip" TARGET="_top" >http://www.php.net/extra/win32build.zip</A >。 </P ></LI ><LI ><P > PHP 使用的 DNS 解析器的源代码:<A HREF="http://www.php.net/extra/bindlib_w32.zip" TARGET="_top" >http://www.php.net/extra/bindlib_w32.zip</A >。用这个替代 <TT CLASS="filename" >win32build.zip</TT > 中的 <TT CLASS="filename" >resolv.lib</TT >。 </P ></LI ><LI ><P > 如果计划把 PHP 编译成 Apache 的静态模块那还需要 <A HREF="http://www.apache.org/dist/httpd/" TARGET="_top" >Apache 源程序</A >。 </P ></LI ></UL ><P > 最后,还需要 PHP 本身的源代码。可以通过<A HREF="http://www.php.net/anoncvs.php" TARGET="_top" >匿名 CVS</A > 得到最新的开发版本,一个<A HREF="http://snaps.php.net/" TARGET="_top" >快照</A >或者最新发行版本的<A HREF="http://www.php.net/downloads.php" TARGET="_top" >源程序</A >的打包文件。 </P ></DIV ><DIV CLASS="sect2" ><H2 CLASS="sect2" ><A NAME="install.windows.building.install" >放到一起</A ></H2 ><P > 下载了所有的包后需要将它们解压缩到适当的位置: <P ></P ><UL ><LI ><P > 建立一个工作目录作为解压缩后存放所有文件的地方,例如:<TT CLASS="filename" >C:\work</TT >。 </P ></LI ><LI ><P > 在工作目录(<TT CLASS="filename" >C:\work</TT >)下新建一个目录 <TT CLASS="filename" >win32build</TT > 并将 <TT CLASS="filename" >win32build.zip</TT > 解压缩到其中。 </P ></LI ><LI ><P > 在工作目录(<TT CLASS="filename" >C:\work</TT >)下新建一个目录 <TT CLASS="filename" >bindlib_w32</TT > 并将 <TT CLASS="filename" >bindlib_w32.zip</TT > 解压缩到其中。 </P ></LI ><LI ><P > 将下载的 PHP 源程序解压缩到工作目录(<TT CLASS="filename" >C:\work</TT >)中。 </P ></LI ><LI ><P > 要编译库还需要(或下载现成的)头文件和库文件并分别放置到 <TT CLASS="filename" >C:\work\win32build\include</TT > 和 <TT CLASS="filename" >C:\work\win32build\lib</TT > 目录中去。 </P ></LI ><LI ><P > 如果没有安装有 bison 和 flex 的 Cygwin,那还需要将 <TT CLASS="filename" >C:\work\win32build\bin</TT > 目录放入系统 PATH 中,以使此工具可以被配置脚本找到。 </P ></LI ></UL > 经过以上步骤后目录结构应该如下: <TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><PRE CLASS="screen" >+--C:\work | | | +--bindlib_w32 | | | | | +--arpa | | | | | +--conf | | | | | +--... | | | +--php-5.x.x | | | | | +--build | | | | | +--... | | | | | +--win32 | | | | | +--... | | | +--win32build | | | | | +--bin | | | | | +--include | | | | | +--lib</PRE ></TD ></TR ></TABLE > </P ><P > 如果不是用 <A HREF="http://www.cygwin.com/" TARGET="_top" >Cygwin</A > 的话,还必须新建一个目录 <TT CLASS="filename" >c:\usr\local\lib</TT > 并将 <TT CLASS="filename" >bison.simple</TT > 从 <TT CLASS="filename" >c:\work\win32build\bin</TT > 拷贝到 <TT CLASS="filename" >c:\usr\local\lib</TT > 中。 </P ><DIV CLASS="note" ><BLOCKQUOTE CLASS="note" ><P ><B >注意: </B > 如果想使用 PEAR 以及舒适的命令行安装程序,就非要用 CLI-SAPI。有关 PEAR 和安装程序的更多信息见 <A HREF="http://pear.php.net/manual" TARGET="_top" >PEAR</A > 网站。 </P ></BLOCKQUOTE ></DIV ></DIV ><DIV CLASS="sect2" ><H2 CLASS="sect2" ><A NAME="install.windows.building.resolvlib" >编译 resolv.lib</A ></H2 ><P > 必须编译 <TT CLASS="filename" >resolv.lib</TT > 库。自己决定是需要调试信息(bindlib - Win32 Debug)还是不需要(bindlib - Win32 Release),但是要记住自己的选择,因为用 Debug 模式编译的 resolv.lib 只能和 Debug 模式编译的 PHP 连接。编译适当的配置: <P ></P ><UL ><LI ><P > 图形界面用户,通过鼠标双击 <TT CLASS="filename" >C:\work\bindlib_w32\bindlib.dsw</TT > 运行 VC++。接着选择 Build => Rebuild All。 </P ></LI ><LI ><P > 命令行用户,确认要么注册了 C++ 环境变量,要么运行了 <B CLASS="command" >vcvars.bat</B >,然后运行下面任意一行命令: </P ><P ></P ><UL ><LI ><P > <B CLASS="command" >msdev bindlib.dsp /MAKE "bindlib - Win32 Debug"</B > </P ></LI ><LI ><P > <B CLASS="command" >msdev bindlib.dsp /MAKE "bindlib - Win32 Release"</B > </P ></LI ></UL ></LI ></UL > 到这一步,应该得到了一个可用的 <TT CLASS="filename" >resolv.lib</TT > 在 <TT CLASS="filename" >c:\work\bindlib_w32\Debug</TT > 或者 <TT CLASS="filename" >Release</TT > 目录下。将此文件拷贝到 <TT CLASS="filename" >c:\work\win32build\lib</TT > 目录下并覆盖同名的文件。 </P ></DIV ><DIV CLASS="sect2" ><H2 CLASS="sect2" ><A NAME="install.windows.building.new" >用新编译系统编译 PHP(仅适用于 PHP >=5)</A ></H2 ><P > 本节讲解了怎样用新编译系统编译 PHP >=5,此系统是基于 CLI 的,并且非常类似于 PHP 的 Unix 编译系统。 </P ><DIV CLASS="note" ><BLOCKQUOTE CLASS="note" ><P ><B >注意: </B > 此编译系统在 PHP 4 中不可用。请参考<A HREF="install.windows.building.html#install.windows.building.dsw" >用 DSW 文件编译 PHP</A >一节。 </P ></BLOCKQUOTE ></DIV ><P > 开始之前要确保阅读了<A HREF="install.windows.building.html#install.windows.building.install" >放到一起</A >一节并且已经编译了所有所需的库,例如 <A HREF="http://www.xmlsoft.org/" TARGET="_top" >Libxml</A > 或 <A HREF="http://icu.sourceforge.net/" TARGET="_top" >ICU</A >(PHP >= 6 中需要)。 </P ><P > 首先应该打开一个用于 Visual Studio 的命令行提示符,应在开始菜单中能找到。正常的命令提示符可能不能用,因为没有设定所需的环境变量。输入类似 <B CLASS="command" >cd C:\work\php-5.x.x</B > 的命令进入 PHP 源程序目录。现在可以开始配置 PHP 了。 </P ><P > 第二步是运行 <B CLASS="command" >buildconf</B > 批处理文件来扫描文件夹寻找 <TT CLASS="filename" >config.w32</TT > 来建立配置脚本。默认时此命令还会搜索以下目录:<TT CLASS="filename" >pecl; ..\pecl; pecl\rpc; ..\pecl\rpc</TT >。自 PHP 5.1.0 起,可以通过 <TT CLASS="literal" >--add-modules-dir</TT > 参数来改变此行为(例如 <B CLASS="command" >cscript /nologo win32/build/buildconf.js --add-modules-dir=../php-gtk2 --add-modules-dir=../pecl</B >)。 </P ><P > 第三步是配置。要查看可用的配置选项列表,输入 <B CLASS="command" >cscript /nologo configure.js --help</B > 命令。选择了需要激活或禁止的选项之后,输入类似 <B CLASS="command" >cscript /nologo configure.js --disable-foo --enable-fun-ext</B > 的命令。使用 <TT CLASS="literal" >--enable-foo=shared</TT > 将尝试将“foo”扩展库编译为共享的,可动态加载的模块。 </P ><P > 最后一步是编译。只需运行命令 <B CLASS="command" >nmake</B > 即可。所生成的文件(例如 .exe 和 .dll)将会放在 <TT CLASS="filename" >Release_TS</TT > 或 <TT CLASS="filename" >Debug_TS</TT > 目录下(如果编译的是线程安全版的话),或者是 <TT CLASS="filename" >Release</TT > 或 <TT CLASS="filename" >Debug</TT > 目录。 </P ><P > 作为可选项还可以运行 PHP 的测试套件,输入 <B CLASS="command" >nmake test</B > 命令。如果要做一个特定的测试,可以用 'TESTS' 变量(例如 <B CLASS="command" >nmake /D TESTS=ext/sqlite/tests test</B > 将只执行 sqlite 测试)。要删除编译过程中生成的文件,可以用 <B CLASS="command" >nmake clean</B > 命令。 </P ><P > 有个很有用的选项来编译快照:<TT CLASS="literal" >--enable-snapshot-build</TT >。此选项添加了一个新的编译模式(<B CLASS="command" >nmake build-snap</B >)。这将尝试编译每一个可用的扩展库(默认为共享模块方式),但是忽略个别的扩展库或 SAPI 中的编译错误。 </P ></DIV ><DIV CLASS="sect2" ><H2 CLASS="sect2" ><A NAME="install.windows.building.dsw" >用 DSW 文件编译 PHP(PHP 4)</A ></H2 ><P > 自 PHP 5 起不支持用 DSW 文件来编译 PHP,因为有了一个<A HREF="install.windows.building.html#install.windows.building.new" >更灵活的系统</A >。不过还是可以用此方法,但要记住此系统并不经常维护,因此编译可能会有问题。不过这是在 Windows 下编译 PHP 4 的唯一方法。 </P ><DIV CLASS="sect3" ><H3 CLASS="sect3" ><A NAME="install.windows.building.dsw.configure" >配置 MVC ++</A ></H3 ><P > 第一步是配置 MVC++ 来准备编译。启动 Microsoft Visual C++,在菜单中选择 Tools => Options。在对话框中选择 directories 标签。按顺序把下拉选项选为 Executables,Includes 和 Library files。其内容应类似于: <P ></P ><UL ><LI ><P > Executable files:<TT CLASS="filename" >C:\work\win32build\bin</TT >,Cygwin 用户:<TT CLASS="filename" >C:\cygwin\bin</TT > </P ></LI ><LI ><P > Include files:<TT CLASS="filename" >C:\work\win32build\include</TT > </P ></LI ><LI ><P > Library files:<TT CLASS="filename" >C:\work\win32build\lib</TT > </P ></LI ></UL > </P ></DIV ><DIV CLASS="sect3" ><H3 CLASS="sect3" ><A NAME="install.windows.building.dsw.compile" >编译</A ></H3 ><P > 对于初学者最好的上手方法是编译 CGI 版本: </P ><P ></P ><UL ><LI ><P > 图形界面用户,运行 VC++,选择 File => Open Workspace 菜单并选择 <TT CLASS="filename" >C:\work\php-4.x.x\win32\php4ts.dsw</TT >。接着选择 Build => Set Active Configuration 菜单并选择想要的配置,要么是 <TT CLASS="literal" >php4ts - Win32 Debug_TS</TT > 要么是 <TT CLASS="literal" >php4ts - Win32 Release_TS</TT >。最后选择 Build => Rebuild All。 </P ></LI ><LI ><P > 命令行用户,确认要么注册了 C++ 环境变量,要么运行了 <B CLASS="command" >vcvars.bat</B >,然后从 <TT CLASS="filename" >C:\work\php-4.x.x\win32</TT > 目录下运行下面任意一行命令: </P ><P ></P ><UL ><LI ><P > <B CLASS="command" >msdev php4ts.dsp /MAKE "php4ts - Win32 Debug_TS"</B > </P ></LI ><LI ><P > <B CLASS="command" >msdev php4ts.dsp /MAKE "php4ts - Win32 Release_TS"</B > </P ></LI ><LI ><P > 到这一步,应该得到一个可用的 <TT CLASS="filename" >php.exe</TT > 在 <TT CLASS="filename" >C:\work\php-4.x.x.\Debug_TS</TT > 或 <TT CLASS="filename" >Release_TS</TT > 目录下。 </P ></LI ></UL ></LI ></UL ><P > 有可能通过编辑 <TT CLASS="filename" >main/config.win32.h</TT > 文件对编译做少量的定制。例如可以改变 <TT CLASS="filename" >php.ini</TT > 文件的默认位置,内置的扩展库,以及扩展库的默认位置。 </P ><P > 下一步可能想要编译 CLI 版本,这是设计用于 <A HREF="features.commandline.html" >PHP 的命令行方式</A >。步骤和编译 CGI 版本相同,只除了要选择 <TT CLASS="literal" >php4ts_cli - Win32 Debug_TS</TT > 或者 <TT CLASS="literal" >php4ts_cli - Win32 Release_TS</TT > 项目文件。成功编译后会在 <TT CLASS="filename" >Release_TS\cli\</TT > 或者 <TT CLASS="filename" >Debug_TS\cli\</TT > 目录下找到 <TT CLASS="filename" >php.exe</TT > 文件。 </P ><P > 要编译 SAPI 模块(<TT CLASS="filename" >php4isapi.dll</TT >)来将 PHP 和 Microsoft IIS 集成起来,将 active configuration 设为 <TT CLASS="filename" >php4isapi-whatever-config</TT > 并编译所需要的 dll。. </P ></DIV ></DIV ></DIV ><DIV CLASS="NAVFOOTER" ><HR ALIGN="LEFT" WIDTH="100%"><TABLE SUMMARY="Footer navigation table" WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" ><A HREF="install.windows.xitami.html" ACCESSKEY="P" >上一页</A ></TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" ><A HREF="index.html" ACCESSKEY="H" >起始页</A ></TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" ><A HREF="install.windows.extensions.html" ACCESSKEY="N" >下一页</A ></TD ></TR ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" >Microsoft Windows 下的 Xitami</TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" ><A HREF="install.windows.html" ACCESSKEY="U" >上一级</A ></TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" >Windows 下安装扩展库</TD ></TR ></TABLE ></DIV ></BODY ></HTML >