Windows 系统下的安装

本节内容适用于 Windows 98/Me 以及 Windows NT/2000/XP。PHP 不能在16位平台例如 Windows 3.1 下运行。有时我们把支持 PHP 的 Windows 平台称为 Win32。自 PHP 4.3.0 开始不再支持 Windows 95。

有两种方法安装 PHP for Windows:手工安装或者使用 InstallShield 安装。

如果你有 Microsoft Visual Studio,也可以编译 PHP 的源程序。

一旦在 Windows 系统下安装好 PHP 之后,你可能需要加载各种扩展库以实现更多的功能。

Windows InstallShield

Windows版的 PHP 安装程序可以从 http://www.php.net/downloads.php 获得,此程序将安装 PHPCGI 版本,并且自动配置好 IIS,PWS 和 Xitami 三种 Web 服务器。

注: 此外注意,尽管 InstallShield installer 是一种使 PHP 运行起来的简单方法,但是有很多限制,例如不支持自动设置扩展库。只有下载 zip 压缩包才包含了所有支持的扩展库。

安装好你选用的 HTTP 服务器并且确定工作正常。

运行可执行的安装程序并按照安装向导的提示进行安装。安装程序支持两种安装方法 - 标准,尽量提供最佳默认参数,高级,在安装过程中提问。

安装向导收集足够的信息来配置 php.ini 文件并且配置 Web 服务器来使用 PHP。在 NT Workstation 下的 IIS 和 PWS 中,会列出服务器上所有节点的脚本映射,你可以在这些节点中选择哪些加入 PHP 的脚本映射。

一旦安装结束,安装程序会提示是否需要重新启动系统。重启动服务器或者开始使用 PHP。

警告

注意,这样安装的 PHP 并不安全。如果你想要更安全的安装 PHP,最好手工进行,并且小心地配置每个选项。自动进行的安装程序只是提供一个可以马上使用的 PHP,并不意味着可以用在在线的服务器上。

手工安装步骤

本安装指南帮你手工安装和配置 PHP 到你的 Windows Webserver。本指南的原始版本由 Bob Silva 编译,位于 http://www.umesd.k12.or.us/php/win32install.html。你需要从 http://www.php.net/downloads.php 下载一个包含可执行版本的 zip 包。

PHP 4 的 Windows 版有三种方式 - CGI 可执行程序(php.exe),CLI 可执行程序(sapi/php.exe) 和其它一些 SAPI 模块:

php4apache.dll - Apache 1.3.x 模块
php4apache2.dll - Apache 2.0.x 模块
php4isapi.dll - ISAPI 兼容服务器的 ISAPI 模块,例如 IIS 4.0/PWS 4.0 或更新版本
php4nsapi.dll - Netscape/iPlanet 模块

最后一种是 PHP 4 新提供的方式,提供了显著的性能增长以及一些新功能。还有一个 CLI 版本在PHP 的命令行模式一章中有进一步说明。

警告

SAPI 模块在 4.1 版中有了显著的增强,但是,在一些老系统中,你也许会遇到可能的服务器错误或者其他的模块例如 ASP 失败。

DCOM and MDAC requirements: 如果你选择了其中一个 SAPI 模块并且是在 Windows 95 下使用,要确认从微软的 DCOM 页面下载安装了 DCOM 更新。如果使用 Windows 9x/NT4,需要下载最新版本的 Microsoft Data Access Components (MDAC),位于 http://msdn.microsoft.com/data/

不论何种 Web 服务器,都需要先进行以下步骤:

c:\php
   |
   +--cli
   |  |
   |  |-php.exe           -- CLI 可执行程序 - 仅用于命令行脚本
   |
   |
   +--dlls                -- 支持扩展库的 dll --> Windows 系统目录
   |  |
   |  |-expat.dll
   |  |
   |  |-fdftk.dll
   |  |
   |  |-...
   |
   +--extensions          -- PHP 扩展库的 dll
   |  |
   |  |-php_bz2.dll
   |  |
   |  |-php_cpdf.dll
   |  |
   |  |-..
   |
   +--mibs                -- SNMP 的支持文件
   |
   |
   +--openssl             -- Openssl 的支持文件
   |
   |
   +--pdf-related         -- PDF 的支持文件
   |
   |
   +--sapi                -- SAPI dlls
   |  |
   |  |-php4apache.dll
   |  |
   |  |-php4apache2.dll
   |  |
   |  |-php4isapi.dll
   |  |
   |  |-..
   |
   |-install.txt
   |
   |-..
   |
   |-php.exe              -- CGI 可执行程序
   |
   |-..
   |
   |-php.ini-dist
   |
   |-php.ini-recommended
   |
   |-php4ts.dll           -- 主 dll --> Windows 系统目录
   |
   |-...

CGI 程序 - C:/php/php.exe -,CLI 程序 - c:\php\cli\php.exe -,和 SAPI 模块 - c:\php\sapi\*.dll - 依赖于主 dll c:\php\php4ts.dll。必须确认此 dll 可以被 PHP 找到。寻找此 dll 的顺序如下:

调用 php.exe 的目录。如果是用 SAPI 模块则为 webserver 调用 dll 的目录(例如 php4apache.dll)。
Windows 路径环境变量 PATH 中的任何目录。

以下步骤为可选项。

按照这些指示已经完成了 Windows 下设定 PHP 的基本步骤。下一步是选择 webserver 并使其运行 PHP。对于以下 webserver 有安装指南:

编译源程序

开始之前,很值得回答一下这个问题:“为什么在 Windows 下编译这么难?”两个原因:

  1. Windows 下还没有愿意免费共享代码的开发人员群体。直接结果就是没有足够的投资去建立支持这种开发方式的体系。大体上,尽量做到的可用资源都是从 UNIX 下的工具来的。不要奇怪这种传统不时会出现。

  2. 下面几乎所有的说明都是“看过就忘”的类型。所以坐稳当并且尽可能忠实地按照说明来做。

需求

要编译 PHP 你需要 Microsoft 开发环境。推荐使用 Microsoft Visuaul C++ 6.0。要释放下载的文件还需要一个解压缩工具(例如:Winzip)。如果你还没有解压缩的工具,可以从 InfoZip 免费下载一个。

在开始之前,你需要下载...

最后,你还需要 PHP 4 的源代码。你可以通过匿名 CVS 得到最新的开发版本,一个快照或者最新发行版本的源程序的打包文件。

放到一起

下载了所有的包后需要将他们解压缩到适当的位置。

  • 建立一个工作目录作为解压缩后存放所有文件的地方,例如:c:\work

  • 在你的工作目录(c:\work)下新建一个目录 win32build 并将 win32build.zip 解压缩到其中。

  • 在你的工作目录(c:\work)下新建一个目录 bindlib_w32 并将 bindlib_w32.zip 解压缩到其中。

  • 将下载的 PHP 源程序解压缩到工作目录(c:\work)中。

经过这些步骤后你的目录结构应该如下:

+--c:\work
|  |
|  +--bindlib_w32
|  |  |
|  |  +--arpa
|  |  |
|  |  +--conf
|  |  |
|  |  +--...
|  |
|  +--php-4.x.x
|  |  |
|  |  +--build
|  |  |
|  |  +--...
|  |  |
|  |  +--win32
|  |  |
|  |  +--...
|  |
|  +--win32build
|  |  |
|  |  +--bin
|  |  |
|  |  +--include
|  |  |
|  |  +--lib

新建一个目录 c:\usr\local\lib。将 c:\work\win32build\bin 中的 bison.simple 拷贝到 c:\usr\local\lib中去。

注: Cygwin 用户应该忽略最后一步。正确安装的 Cygwin 环境已经提供了 bison.simplebison.exe 文件。

配置 MVC ++

下一步是配置 MVC ++ 来准备编译。运行 Microsoft Visual C++,在菜单中选择 Tools => Options。在对话框中,选择 directories 标签。依次将下拉框改为 Executables,Includes 和 Library files。将其修改为:

  • Executable files: c:\work\win32build\bin, Cygwin 用户:cygwin\bin

  • Include files: c:\work\win32build\include

  • Library files: c:\work\win32build\lib

Build resolv.lib

必须编译 resolv.lib 库。自己决定是需要调试信息(bindlib - Win32 Debug)还是不需要(bindlib - Win32 Release)。编译适当的配置:

  • 图形界面用户,运行 VC++,选择 File => Open Workspace,找到 c:\work\bindlib_w32 目录并选择 bindlib.dsw 文件。 菜单并选择 bindlib。接着选择 Build => Set Active Configuration 菜单并选择需要的配置。最后选择 Build => Rebuild All。

  • 命令行用户,确认你要么注册了 C++ 环境变量,要么运行了 vcvars.bat,然后运行下面任意一个:

    • msdev bindlib.dsp /MAKE "bindlib - Win32 Debug"

    • msdev bindlib.dsp /MAKE "bindlib - Win32 Release"

到这一步,你应该得到一个 resolv.lib 在你的 c:\work\bindlib_w32\Debug 或者 Release 目录下。拷贝此文件到 c:\work\win32build\lib 目录下并且覆盖同名的文件。

编译

对于初学者最好的上手方法是编译 CGI 版本。

  • 图形界面用户,运行 VC++,选择 File => Open Workspace 菜单并选择 c:\work\php-4.x.x\win32\php4ts.dsw。接着选择 Build => Set Active Configuration 菜单并选择想要的配置,要么 php4ts - Win32 Debug_TS 或者是 php4ts - Win32 Release_TS。最后选择 Build => Rebuild All。

  • 命令行用户,确认你要么注册了 C++ 环境变量,要么运行了 vcvars.bat,然后在 c:\work\php-4.x.x\win32 目录下运行下面任意一个命令:

    • msdev php4ts.dsp /MAKE "php4ts - Win32 Debug_TS"

    • msdev php4ts.dsp /MAKE "php4ts - Win32 Release_TS"

    • 到这一步,你应该得到一个可用的 php.exe 在你的 c:\work\php-4.x.x.\Debug_TS 或者 Release_TS 目录下。

有可能通过编辑 main/config.win32.h 文件对编译做少量的定制。例如你可以改变默认的 php.ini 文件,内置的扩展库,以及扩展库的位置。

下一步你可能想要编译 CLI 版本,这是设计用于 PHP 的命令行方式。步骤和编译 CGI 版本相同,只除了要选择 php4ts_cli - Win32 Debug_TS 或者 php4ts_cli - Win32 Release_TS 工程文件。在成功编译之后你会在 Release_TS\cli\ 或者 Debug_TS\cli\ 目录下发现 php.exe 文件。

注: 如果你想使用 PEAR 或者舒适的命令行安装程序,就非要用 CLI-SAPI。有关 PEAR 和安装程序的更多信息见 PEAR 网站文档。

要编译 SAPI 模块(php4isapi.dll)来将 PHP 和 Microsoft IIS 集成起来,将激活的配置设为 php4isapi-whatever-config 并编译所需要的 dll。

Windows 扩展库的安装

在安装好 PHP 和 Webserver 之后,你可能想安装一些扩展库以增加功能。你可以通过编辑 php.ini 来选择哪些扩展库在 PHP 启动时被加载。你也可以在程序中用 dl() 函数动态加载。

PHP 4 扩展库的 DLL 文件开头都是 'php_'(PHP 3 中是 'php3_' )。这避免了 PHP 扩展库和它们的支持库混淆。

注: 在PHP 4.3.1 版中 BCMath,Calendar,COM,Ctype,FTP,MySQL,ODBC,Overload,PCRE,Session,Tokenizer,WDDX,XML 和 Zlib 的支持都是内置的。不需要加载任何扩展库就可以使用这些函数。你可以通过自己的版本中的 README.txt 或者 install.txt 文件或者此表格来查看哪些模块是内置的。

PHP 搜索扩展库的默认位置是 c:\php4\extensions。要改变此设置来反映你对 PHP 的配置,编辑 php.ini 文件:

注: 如果你运行 PHP 的服务器模块版本,记得重启动 webserver 来使你对 php.ini 的改动生效。

下表说明了一些可用的扩展库和所需要的附加 dll 文件。

表格 3-1. PHP 扩展库

库名说明注意
php_bz2.dllbzip2 压缩函数库
php_calendar.dllCalendar 转换函数库自 PHP 4.0.3 起内置
php_cpdf.dllClibPDF 函数库
php_crack.dllCrack 函数库
php3_crypt.dll加密函数库未知
php_ctype.dllctype 族函数库自 PHP 4.3.0 起内置
php_curl.dllCURL,客户端 URL 函数库需要 libeay32.dllssleay32.dll(已包含)
php_cybercash.dllCybercash 支付函数库PHP <= 4.2.0
php_db.dllDBM 函数库不赞成使用。用 DBA 代替(php_dba.dll
php_dba.dllDBA:数据库(dbm-style)抽象层函数库
php_dbase.dlldBase 函数库
php3_dbm.dllBerkeley DB2 库未知
php_dbx.dlldbx 函数库 
php_domxml.dllDOM XML 函数库 PHP <= 4.2.0 需要 libxml2.dll(已包含) PHP >= 4.3.0 需要 iconv.dll(已包含)
php_dotnet.dll.NET 函数库PHP <= 4.1.1
php_exif.dll从 JPEG 读取 EXIF 头信息
php_fbsql.dllFrontBase 函数库PHP <= 4.2.0
php_fdf.dllFDF:表单数据格式化函数库.需要 fdftk.dll(已包含)
php_filepro.dllfilePro 函数库只读访问
php_ftp.dllFTP 函数库自 PHP 4.0.3 起内置
php_gd.dllGD 库图像处理函数库 在 PHP 4.3.2 中删除了。还要注意 GD1 中不能用真彩色函数,应该用 php_gd2.dll 替代。
php_gd2.dllGD2 库图像函数库GD2
php_gettext.dllGettext 函数库 PHP <= 4.2.0 需要 gnu_gettext.dll(已包含),PHP >= 4.2.3 需要 libintl-1.dlliconv.dll(已包含)
php_hyperwave.dllHyperWave 函数库
php_iconv.dllICONV 字符集转换需要 iconv-1.3.dll(已包含),PHP >=4.2.1 需要 iconv.dll
php_ifx.dllInformix 函数库需要 Informix 库文件
php_iisfunc.dllIIS 管理函数库
php_imap.dllIMAP POP3 和 NNTP 函数库PHP 3:php3_imap4r1.dll
php_ingres.dllIngres II 函数库需要 Ingres II 库文件
php_interbase.dllInterBase 函数库需要 gds32.dll(已包含)
php_java.dllJava 函数库PHP <= 4.0.6 需要 jvm.dll(已包含)
php_ldap.dllLDAP 函数库 PHP <= 4.2.0 需要 libsasl.dll(已包含),PHP >= 4.3.0 需要 libeay32.dllssleay32.dll(已包含)
php_mbstring.dll多字节字符串函数库
php_mcrypt.dllMcrypt 加密函数库需要 libmcrypt.dll
php_mhash.dllMhash 函数库PHP >= 4.3.0 需要 libmhash.dll(已包含)
php_mime_magic.dllMimetype 函数库需要 magic.mime(已包含)
php_ming.dllMing 函数库 - Flash 支持
php_msql.dllmSQL 函数库需要 msql.dll(已包含)
php3_msql1.dllmSQL 1 客户端未知
php3_msql2.dllmSQL 2 客户端未知
php_mssql.dllMSSQL 函数库需要 ntwdblib.dll(已包含)
php3_mysql.dllMySQL 函数库自 PHP 4 起内置
php3_nsmail.dllNetscape 邮件函数库未知
php3_oci73.dllOracle 函数库未知
php_oci8.dllOracle 8 函数库需要 Oracle 8.1 以上客户端库文件
php_openssl.dllOpenSSL 函数库需要 libeay32.dll(已包含)
php_oracle.dllOracle 函数库需要 Oracle 7 客户端库文件
php_overload.dll对象重载函数库自 PHP 4.3.0 内置
php_pdf.dllPDF 函数库
php_pgsql.dllPostgreSQL 函数库
php_printer.dllPrinter 函数库
php_shmop.dll共享内存函数库
php_snmp.dllSNMP 函数库仅在 NT 下使用!
php_sockets.dllSocket 函数库
php_sybase_ct.dllSybase 函数库需要 Sybase 客户端库文件
php_tokenizer.dllTokenizer 函数库自 PHP 4.3.0 起内置
php_w32api.dllW32api 函数库
php_xmlrpc.dllXML-RPC 函数库PHP >= 4.2.1 需要 iconv.dll(已包含)
php_xslt.dllXSLT 函数库 PHP <= 4.2.0 需要 sablot.dllexpat.dll(已包含)。PHP >= 4.2.1 需要 sablot.dllexpat.dlliconv.dll(已包含)。
php_yaz.dllYAZ 函数库
php_zlib.dllZLib 压缩函数库自 PHP 4.3.0 起内置