IBM®
跳转到主要内容
    中国 [选择]    使用条款
 
 
Select a scope: Search for:    
    首页    产品    服务与解决方案     支持与下载    个性化服务    
跳转到主要内容

developerWorks 中国  >  Open source | Web development  >

在 IBM HTTP Server 上部署 PHP 应用程序

您可能并不清楚自己可以干什么

developerWorks
文档选项

未显示需要 JavaScript 的文档选项


级别: 初级

Matthew Peters (matthew_peters@uk.ibm.com), 软件工程师
Caroline Maynard (caroline.maynard@uk.ibm.com), 软件工程师
Graham Charters (charters@uk.ibm.com), 软件工程师
Anantoju V Srinivas (srinivas.anantoju@in.ibm.com), 资深软件工程师

2005 年 4 月 14 日

IBM? 维护了自己的一份 Apache Web 服务器的副本,并将其作为 IBM HTTP Server 与 WebSphere Application Server 一起发行。这个 Web 服务器的基础是 Apache,因此可以部署并运行使用 PHP(Hypertext Pre-Processor) 编写的应用程序。本文将介绍开源的 Apache Web 服务器与 IBM 的 Apache Web 服务器之间的区别,并展示 IBM 的 Apache Web 服务器运行一个知名的 PHP 应用程序的情况。

简介

很多年以来,IBM 一直将 IBM HTTP Server Web 服务器作为 WebSphere Application Server 包的一部分进行发行。在以 WebSphere 为中心的世界中,大部分困难的任务都是在 WebSphere Application Servers 中由使用 Java? 语言编写的应用程序来处理的;而 Web 服务器的地位则没有那么重要,它的任务是作为应用程序服务器的前端,并处理一些静态的内容,包括静态的 html 页面、applets,等等。

事实证明,IBM HTTP Server 是 Web 方面最流行的 Web 服务器 Apache 的一个功能完备的版本,可以处理的内容远远不止于静态内容。它可以运行使用 Apache 的动态共享对象(DSO)接口的模块,尤其是可以用来部署和运行使用 PHP 编写的应用程序。

让我们首先对开源的 Apache 和 IBM 的 HTTP Server 的异同点进行一下比较,并考虑一下为什么要优先选择其中的一个。然后,作为一个例证,同时也是向那些怀疑论者证明一下 IBM HTTP Server 的能力,我们将详细介绍一下在 IBM HTTP Server 上运行一个非常有代表性的开源 PHP 应用 PHPNuke 的过程。为了证明这种成功并非侥幸,我们将介绍一下如何在 Windows? 和 Linux? 上完成这个过程。





回页首


IBM HTTP Server 是什么?它与开源的 Apache Web 服务器有什么区别?

首先,IBM HTTP Server 就是 Apache。IBM HTTP Server 有两个版本,分别基于开源 Apache的 1.3 和 2.0 版本,但是对其进行了少许的改动,从而允许 IBM 可以增加一些新的特性。其代码基础是由 IBM 内部维护的;IBM 会有选择地从开源 Apache CVS 仓库中挑选一些 bug fix 并应用到自己的代码中,从而保持代码是最新的。IBM 对安全性的 bug 设置的优先级非常高。对于那些希望在 IBM HTTP Server 上使用 PHP 的用户来说,有一点非常重要,IBM 确保自己的 HTTP Server 与开源的 Apache 完全兼容,因此那些可以在 Apache 上运行的模块都可以在 IBM HTTP Server 上运行。

您可以在 IBM HTTP Server 主页上下载 IBM HTTP Server,在 参考资料 中提供了链接。

了解 IBM 对 Apache 所做的改变和新增特性最好的地方是 IBM HTTP Server Web 站点或 InfoCenter,后者是 IBM HTTP Server 本身自带的技术信息。下面列出了二者之间主要的一些区别,稍后我们将讨论其中最重要的三个区别。

线程
IBM HTTP Server 2.0 是使用多线程编译的,这是开源的 Apache Web 服务器的一个选项。虽然这对于 PHP 本身来说不是什么问题,但是它可能会对一些非线程安全的 PHP 扩展产生问题。稍后我们将详细讨论这个问题。
安全套接字层
IBM HTTP Server 包含内置在 IBM 的 GSKit 库中的安全套接字层支持。开源的 Apache Web 服务器通常会选择使用 OpenSSL。稍后会讨论 GSKit 和 OpenSSL 的 SSL 版本之间的区别。
LDAP
IBM HTTP Server 可以访问一个 LDAP 服务器,为 Web 服务器本身获得用户和组的认证信息。这通常会在下面的环境中使用:一个系统管理员管理很多 Web 服务器,并且希望在一个地方管理所有 Web 服务器的认证信息。
性能
IBM HTTP Server 包含了两方面的增强,其目的是为了改进系统的性能。第一个增强是“FastCache”加速器,它通过将一些页面缓存在内核的内存中从而改进响应时间,这最初只在 Windows 上存在,最近在 AIX 上也可以使用了。第二个增强是 IBM HTTP Server 包含了对 FastCGI 的内建支持。FastCGI 是对 CGI(Common Gateway Interface)的一个开放扩展;它定义了一种协议,可以通过一个套接字与持久的 CGI 程序进行通信。这可在使用 CGI 程序时消除一定的负载。
文档
正如前面介绍的一样,IBM HTTP Server 包含了一个 InfoCenter,它是一组全面的帮助页面,重点介绍了 IBM HTTP Server 与 Apache 的区别:使用 SSL 应该如何设置,使用 LDAP 服务器应该如何设置,等等。这些文档是以 10 种语言提供的。
安装
IBM HTTP Server 使用基于 Java 的 InstallShield 安装程序,因此安装过程在各种平台上看起来都是相同的。安装程序中的文本内容也有很多语言的选择,就像 InfoCenter 一样。它也可以进行配置,作为一个静默安装来运行。
源代码
IBM 并没有发行 IBM HTTP Server 的源代码,而是只发行了二进制文件。对于有些人来说,这可能是最大的区别,稍后我们会详细讨论这个问题。




回页首


多线程,Apache 1.3 和 Apache 2.0

如果您已经使用了 Apache 和 PHP 一段时间了,那么您很可能见到过安装文档中的一个警告信息,它说“不要在生产环境中使用 Apache 2.0.x 和 PHP,在 Unix 和 Windows 上都不行”。在 Windows 系统上的 PHP 5.0.2 包中,这个警告信息可以在 install.txt 文件中的第 745 行找到。我们需要理解此处的这个问题是什么,这样就可以决定是否要使用 Apache 2.0 或 IBM HTTP Server 2.0。

Apache 2.0 可以配置为以两种方法运行:采用线程的和不采用线程的。当作为一个采用线程的服务器运行时,服务器中可以同时有多个线程都处于活动状态在执行,一次可以为多个用户生成响应信息。通常,这样可以提高服务器的响应能力,使其更好地利用具有多个处理器的大型硬件。但是它同时也引入了一种风险。服务器调用的各个软件层次必须在同时为多个用户调用时都能保证是安全的。尽管 Web 服务器本身、PHP 解释器以及 PHP 扩展以这样调用都是安全的,但是有些 PHP 扩展会使用其他语言(例如 C 语言)编写的库,这些库并不全都是线程安全的。

在 Apache Web 页面上您可以找到一个有关这个问题的讨论,其中给出了一些建议,以及一种用来发现您的 PHP 扩展可能正在使用哪些 C 库以及哪些是线程安全的方法,请参阅参考资料部分。

在实践中,很多人都会选择回避这个问题,而是采用下面的两种方法:要么以单线程模式使用 Apache 2.0,要么使用 Apache 1.3,它总是以单线程模式运行。虽然 Apache 1.3 和 2.0 也有其他一些区别,例如 Apache 2.0 可以支持 IPv6,但是到目前为止,二者之间最大的区别就是线程的问题,因此保留使用 Apache 1.3 服务器并不像听起来一样是一种退化。

这个问题在 IBM HTTP Server 中是怎样的呢?IBM 采用线程模式从 Apache 2.0 中编译出了 IBM HTTP Server:这样速度更快,但却可能在使用非线程安全的扩展时是不安全的。由于 IBM 并没有同时发行源代码,而且选择采用线程和不采用线程的模式都是在编译时进行选择的,因此作为一个终端用户来说,您无法选择采用不使用线程的模式重新编译 IBM HTTP Server 2.0。不过在编写本文时,IBM 正在同时发行基于 2.0 和 1.3 版本的 IBM HTTP Server,这样您就可以选择使用单线程的基于 1.3 版本的服务器了。





回页首


安全套接字层和 GSKit

安全套接字层(SSL)是一个软件层,它可以在 Web 浏览器与服务器之间启用安全加密的通信。当您正在访问的 Web 站点的 URL 是以“https” 而不是以“http”开始时,就可以知道您与服务器之间的通信是通过 SSL 进行的。在 Internet Explorer、Netscape 或 Mozilla 中,在浏览器的状态条中会出现一个小锁。

SSL 不但可以负责对浏览器与服务器之间传递的数据进行加密,而且可以验证您所连接到的服务器就是它所宣称的 Web 站点,或者对 Web 浏览器的用户验证他们就是自己所说的人。

IBM HTTP Server 并没有使用常见的 SSL 的开源实现 OpenSSL,而是使用了 IBM 的 GSKit 库。在 IBM 的很多产品中都使用了这个库,其加密程序内嵌在一个名为 IBM Crypto for C(ICC)的组件中,它在很多平台上都已经通过了联邦信息处理标准(FIPS)的认证,这样就使它非常适合于美国政府的一些部门使用。FIPS 是由美国国家标准与技术研究院(NIST)指定的,在 NIST 站点上提供了对 ICC 的认证。在参考资料部分给出了到这个认证的链接,以及对所执行的测试的详细介绍。

简而言之,IBM HTTP Server 中使用的 SSL 已经为一些政府应用进行了认证。





回页首


没有源代码

正如前面介绍的一样,IBM 并没有发行 IBM HTTP Server 的源代码,尽管它是基于开源的 Apache Web 服务器的。相反,IBM 只为很多通用的平台和操作系统提供了预编译的二进制文件,这些平台和操作系统既有 IBM 的,也有非 IBM 的:AIX、Sun Solaris、HP-UX、Linux(在很多硬件平台上,包括 zSeries?)和 Windows。顺便说一下,IBM 只发行二进制文件而不发行源代码,这种方式采用了开源的 Apache Web 服务器发行所使用的 Apache 许可证协议。

没有源代码到底是给您带来幸运还是不幸,这取决于您如何获得服务、技术支持、文档等。如果您喜欢开源模式的技术支持:可以自由访问源代码,并通过新闻组、blog、社区站点等方式获得技术支持,那么您可能就不会喜欢这种方式。另外一方面,如果您比较喜欢 IBM 的技术支持模式:红皮书、IBM 技术支持 Web 站点以及 IBM 技术支持人员和流程的服务,那么您可能并不想重新编译源代码,这样您就可以很好地使用 IBM HTTP Server 了。注意,虽然 IBM HTTP Server 可以自由下载,但是 IBM 只为那些将 IBM HTTP Server 作为 WebSphere 的一部分购买的用户提供技术支持。





回页首


例子:PHPNuke

这种讨论并不足以说明 IBM HTTP Server 与 Apache 之间的区别。接下来,我们将介绍如何通过安装 PHPNuke(这是一个非常出名的 PHP 应用程序)在 IBM HTTP Server 上运行 PHP。您是否了解这个程序并没有什么关系。PHPNuke 是一个内容管理系统,它是一个为社区提供 Web 站点的软件,从而提供新闻、Web 日志等。

这个实验是在一个单 CPU 的 Intel x86 机器的 Windows 和 Linux 系统上进行的。我们使用了 Windows XP 和 Red Hat 9.0、Red Hat Enterprise Linux version 3 Update 3,并安装了 IBM HTTP Server、PHP、MySQL、phpMyAdmin 以及 PHPNuke。每一节都提供了对 Windows 和 Linux 上的安装指令,每个步骤都清楚地标明了是“W”还是“L”。IBM HTTP Server、PHP 和 MySQL 在 Windows 和 Linux 上的安装步骤不同,而 phpMyAdmin 和 PHPNuke 在这两个操作系统上的安装步骤都是相同的。

开始

第一个步骤是搜集这些软件。在后文的参考资料一节给出了可以下载这些软件的链接。

在 Windows 上,需要使用以下软件:

  • IBM HTTP Server 2.0.47.1
  • PHP 5.0.3
  • MySQL 4.0.23
  • phpMyAdmin 2.6.0-pl3
  • PHPNuke 7.5

您可以下载每个软件的 zip 文件。MySQL 有两个可能的下载:您可以下载包含安装程序的 zip 文件。

在 Linux 上,需要使用以下软件:

  • IBM HTTP Server 6.0.0.0
  • PHP 5.0.3
  • MySQL 4.1.8
  • phpMyAdmin 2.6.0-pl3
  • PHPNuke 7.5

在下一节中,您会看到 Linux 安装文件的确切文件名。

上面这些软件是我们下载当天(2004 年 12 月 21 日)的版本。虽然 PHPNuke 7.6 已经可用了,但是它要花点钱,因此我们选择了 7.5,这是最新的免费版本。

您也可以选择与这个列表不同的其他版本。在 Windows 上,在使用 MySQL 4.1.7 而不是 4.0.22 时会有点问题。它们必须使用 PHP 5.0.2 中提供的 MySQL 客户端库,而不能很好地与 MySQL 4.1.7 一起使用。它会报告一个“1251”错误,并建议更新客户端库。相反,MySQL 4.0 则会将这一问题简化。正如您可以从上面看到的一样,在 Linux 上所有最新的软件都可以放心使用,没有什么问题。

还有,有些情景使用了 PHP 4.3.9,它也可以很好地工作。PHP 4 和 5 的目录层次结构不同,否则我们介绍的这些情景就没有任何区别了。

第一个步骤是安装 IBM HTTP Server。

安装并启动 IBM HTTP Server

这包含三个步骤:解压下载的文件,使用所提供的基于 Java 的安装程序进行安装,并启动 IBM HTTP Server。

根据您正在安装的 IBM HTTP Server 版本的不同,您的机器上可能需要一个特定版本的 Java 运行时。IBM HTTP Server 6.0.0 中内嵌了 Java 安装程序,而 IBM HTTP Server 2.0.47.1 则没有。如果您正在运行 AIX 或 Linux,那么就需要下载一个 Java 运行时的拷贝,您可以从 IBM 的站点上找到免费下载的地方(请参阅参考资料中的链接)。在其他操作系统上,您可能需要从其他地方下载 Java 运行时:Sun JVM 就是很好的一个选择。JVM 的版本似乎对 IBM HTTP Server 安装程序并不重要。

Windows 上精确的步骤如下:

Win.1 解压所下载的 IBM HTTP Server。
将其解压到 C:\installs 中,这样您就会在 C:\installs\IHS-2.0.47.1\ 中找到一个 setup.jar 文件。
Win.2 执行 install 程序。
安装 JVM 并将其加入您的搜索路径之后,就可以按照下面的方式来定位并执行 setup.jar:
C:\installs\IHS-2.0.47.1>java -jar setup.jar


install 对话框会向您询问一些熟悉的问题:
  • 选择安装程序使用的语言
  • 接受限制与条件
  • 指定或使用缺省路径来安装 IBM HTTP Server
  • 选择一种安装类型(Typical 就可以)
  • 输入一个用户名和密码,在 Windows 上它将使用这些信息作为一个服务运行
Win.3 启动 IBM HTTP Server。
现在您有三种方法可以启动 IBM HTTP Server。
  1. 启动一个 Command Prompt 窗口,切换到安装 IBM HTTP Server 的地方,并直接执行 Apache 命令,不过您可能不想每次都这样做。
  2. 找到它的 Windows 服务,并启动这个服务。Start -> Control Panel -> Administrative Tools -> Services。
  3. 第三种方法是在 C:\Program Files\IBM HTTP Server 2.0\bin 中找到 ApacheMonitor.exe,并启动它,然后在 Windows 的状态条的通知区会显示 Apache 的羽毛图标,在屏幕的右下角。当 ApacheMonitor 运行之后,您就可以在这儿启动、停止并重新启动 IBM HTTP Server 了。

Linux 上精确的步骤如下:

Linux.1 下载并解压安装映像文件。
从参考资料中给出的 IBM HTTP Server Web 站点上下载 IBM HTTP Server 6.0(ihs.6000.linux.ia32.tar)。以 root 用户的身份登录并将上面这个文件解压到您的主目录中。总是选择解压到 /root 目录中,后面的例子将会展示这一点。
Linux.2 定位安装映像文件并执行 install 程序。
定位并执行 install 映像文件,所有的屏幕上都选择缺省值,方法如下:
[root@localhost /root] cd /root/IHS
[root@localhost /root/IHS] ./install

Linux.3 启动 IBM HTTP Server
IBM HTTP Server 缺省被安装到 /opt/IBMIHS 中,因此可以按照下面的方法使用 apachectl 命令来启动它:
[root@localhost /root] /opt/IBMIHS/bin/apachectl start

然后当您想要重新启动或停止服务器时,可以使用 apachectl 命令的“restart”或“stop”参数。

连接到 IBM HTTP Server 上并检查安装是否成功

此处的步骤使用一个浏览器连接到 IBM HTTP Server 上,并阅读文档。这个步骤在 Windows 和 Linux 上是相同的。

启动一个 Web 浏览器,并切换到 URL "http://localhost" 上,显示 IBM HTTP Server 的欢迎页面。


图 1. IBMS HTTP Server 欢迎屏幕
IHS 欢迎屏幕

“View Documentation” 链接可以将您带入 InfoCenter 页面,在这儿您可以找到 IBM 向 IBM HTTP Server 中添加的更多内容。不幸的是,InfoCenter 并不能利用 Windows 版本的 Mozilla Firefox 进行正确显示,但是在 Internet Explorer 中显示没什么问题。在 Linux 上,使用 Mozilla 也没有问题。


图 2. IBM HTTP Server InfoCenter
IHS - View Documentation

下一个步骤是安装 MySQL。

安装 MySQL

本节中的步骤包括安装 MySQL、启动 MySQL,并为 root 用户设置密码。MySQL 有很多方法可以达到相同的目的。本节介绍的命令可以使用尽可能少的步骤来配置 MySQL 并创建 PHPNuke 数据库。如果您具有使用 MySQL 的经验,那么可能会知道一些其他方法也可以达到相同的目的。如果是这样,您尽可以不用此处介绍的步骤。这个步骤的安装过程在 Windows 和 Linux 上有很大的区别。

Windows 上精确的步骤如下:

Win.1 解压并安装
MySQL 中提供了 Windows 的安装程序,因此建议您解压所下载的程序,并执行 setup.exe。在安装 4.0.23 时所询问的问题都很基本:安装到哪里(缺省位置为 C:\mysql)和安装类型(Typical 就可以)。如果您使用的是 4.1,就会发现安装程序会询问更多的问题,在安装过程中做的事情也更多。
Win.2 将 MySQL 安装为一个服务并启动这个服务。
将 MySQL 安装为一个自动启动的 Windows 服务。首先,您需要使用一个命令窗口来运行 MySQL 的可执行程序。在 C:\mysql\bin 中打开一个命令窗口:
C:\mysql\bin>mysqld-nt --install

转到 Windows Services 窗口(Start -> Control Panel -> Administrative Tools -> Services),找到 MySQL 并启动它。

Win.3 为 root 用户设置密码
假设您现在已经连接到一个网路上,那么您可能会想设置一个密码来控制访问权限。一旦启动之后,MySQL 就开始监听一个套接字连接。现在我们将用户“root”的密码设置为一个差劲的密码“root”(这仅仅比密码“password”好一点而已!)。我们不推荐使用这个密码!您可以使用稍后选择的其他密码。

另外要考虑的一点是,在随后的这些步骤中,您可能并不想使用 MySQL 的用户 root,而是要为 phpMyAdmin 和 PHPNuke 专门创建一个用户。这样也可以。在本文中我们使用 root,因为这是缺省值。

注意这个用户“root”并不是一个 Windows 用户,而是 MySQL 的一个私有用户 —— 它更像是一个用户管理员角色。

精确步骤:启动 mysql 命令行客户机,输入下面的命令为从本地计算机上来的连接设置密码,如下所示:

C:\mysql\bin>mysql -u root
Welcome ... [text omitted]
mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('root');
Query OK, 0 rows affected (0.00 sec)
mysql>quit
Bye
C:\mysql\bin>

Linux 上精确的步骤如下:

Linux.1 下载安装映像文件
从参考资料部分所列出的 MySQL 的 Web 站点上下载 MySQL 4.1.8 for i386。您需要下载以下文件:
  • MySQL-server-4.1.8-0.i386.rpm
  • MySQL-shared-4.1.8-0.i386.rpm
  • MySQL-devel-4.1.8-0.i386.rpm
  • MySQL-client-4.1.8-0.i386.rpm
Linux.2 安装 MySQL 二进制文件
以 root 用户身份登录,并将上面下载的文件都放到用户主目录中,比如说 /root。切换到目录 /root 中,并执行下面的 rpm 命令安装这四个包。
[root@localhost /root] rpm -ivh MySQL-*

Linux.3 启动 MySQL 服务器
启动 MySQL 服务器有很多方法。通常可以从命令行中启动,这可以使用下面的两个命令:
[root@localhost /root] /etc/init.d/mysql start

或者
[root@localhost /root] service mysql start

如果您以后想停止这个服务,可以使用相同的命令,不过要使用“stop”选项。
Linux.4 为 root 用户设置密码
假设您现在已经连接到一个网路上,那么您可能会想设置一个密码来控制访问权限。一旦启动之后,MySQL 就开始监听一个套接字连接。现在我们将用户“root”的密码设置为一个差劲的密码“root”(这仅仅比密码“password”好一点而已!)。注意这个用户“root”并不是一个 Linux 用户,而是 MySQL 的一个私有用户 —— 它更像是一个用户管理员角色。我们不推荐使用这个密码!您可以使用稍后选择的其他密码。

另外要考虑的一点是,在随后的这些步骤中,您可能并不想使用 MySQL 的用户 root,而是要为 phpMyAdmin 和 PHPNuke 专门创建一个用户。这样也可以。在本文中我们使用 root,因为这是缺省值。

设置密码的方法如下:

[root@localhost /root] mysqladmin -u root password root

安装 PHP 并将 IBM HTTP Server 和 PHP 链接在一起

此处的步骤在 Windows 和 Linux 上稍有不同,因为在 Windows 上您使用了一个预编译的二进制程序,而在 Linux 上您要自己配置并编译 PHP 解释器。这两种情况中的目的是一样的:创建并部署 PHP 目录结构,并配置一个适当的 php.ini 配置文件,配置 IBM HTTP Server,使其通过 PHP 解释器来运行扩展名为 .php 的文件。

Windows 上精确的步骤如下:

Win.1 解压 PHP 的安装程序。
首先解压所下载的 PHP 压缩文件。这里没有安装程序,您可以选择 php 的目录应该在什么地方。我们采用传统的 C:\php。
Win.2 创建 php.ini。
您需要从所提供的两个文件中选择一个 php.ini 文件:php.ini-dist 或 php.ini-recommended。在 C:\php\install.txt 文件中有对这两个文件区别的讨论,它说后者的性能和安全性更好。拷贝 C:\php.ini-recommended 并将其命名为 C:\php\php.ini。
Win.3 在 httpd.conf 文件中添加一些指示原语
现在您需要在 IBM HTTP Server 配置文件中加上三行,这样,IBM HTTP Server 就可以找到 PHP,加载 PHP 模块,并将扩展名为 .php 的文件关联到 PHP 解释器上。

假设您将 IBM HTTP Server 安装到了缺省的地方,那么 IBM HTTP Server 的配置文件就是 C:\Program Files\IBM HTTP Server 2.0\conf\httpd.conf,您需要添加以下三行:

PhpIniDir c:/php
LoadModule php5_module "c:/php/php5apache2.dll"
AddType application/x-httpd-php .php

注意普通的 Windows 目录和文件名中的斜线:这是正确的。您可以手工将这些语句放到配置文件中正确的地方,也可以将其一起剪切到配置文件中,放于第一个 LoadModule 语句之前。如果您没有将 PHP 放到 C:\php 中,就需要编辑 PhpIniDir 指示原语。

Win.4 确保可以找到 php5ts.dll
您可能还需要确保 Windows 可以使用普通的 Windows DLL 加载过程找到并加载必要的 PHP DLL。这个 DLL 是 C:\php\php5ts.dll(ts 表示是线程安全的),您有两种方法可以实现这种功能 —— 可以将 C:\php 加入 PATH 中,或者将 C:\php\php5ts.dll 拷贝到与 IBM HTTP Server 可执行文件所在的相同目录中,即 C:\Program Files\IBM HTTP Server 2.0\bin。在我们组的同事中,有关这两种方法哪种更好,意见也分成了两派。
Win.5 重新启动 IBM HTTP Server 以应用这种修改。
现在 重新启动 IBM HTTP Server。您可以通过 Start -> Control Panel -> Administrative Tools -> Services 或使用 ApacheMonitor 来重新启动这个服务。

Linux 上精确的步骤如下:

Linux.1 下载并解压
从参考资料部分提供的链接中下载 PHP 5.0.3 源代码(php-5.0.3.tar.bz2),并将其解压,方法如下:
[root@localhost /root] tar -xjvf php-5.0.3.tar.bz2

Linux.2 配置并编译源代码
切换到 php-5.0.3 目录中,使用下面的 4 个选项配置并编译源代码。这是一个完整的命令,不过为了阅读方便,进行了分行。编译过程可能需要几分钟,这取决于您的机器的处理器、内存等。
[root@localhost /root/php-5.0.3] ./configure --with-apxs2=/opt/IBMIHS/bin/apxs 
                                 --with-mysql=/usr  
                                 --with-config-file-path=/opt/IBMIHS/conf 
                                 --enable-maintainer-zts
[root@localhost /root/php-5.0.3] make

最后一个选项 --enable-maintainer-zts 可以让 PHP 解释程序被编译为使用与 IBM HTTP Server 类似的采用线程的 Web 服务器安全地运行:“zts”代表 Zend Thread Safe 或一些类似的意思。注意您需要重新编译这个程序。如果您设法找到并下载了一个 Linux 上预编译的 PHP,那么它可能并没有使用线程安全的方式进行编译,当 IBM HTTP Server 加载 PHP 解释器时,它会进行检查,如果 PHP 是以线程安全的方式进行编译的,那么它就会产生一个错误消息。
Linux.3 拷贝 PHP 共享库
将编译好的模块拷贝到 IBM HTTP Server 的 modules 目录中。
[root@localhost /root/php-5.0.3] cp .libs/libphp5.so /opt/IBMIHS/modules

Linux.4 创建 php.ini
您需要从所提供的两个文件中选择一个 php.ini 文件:php.ini-dist 或 php.ini-recommended。在 C:\php\install.txt 文件中有对这两个文件区别的讨论,它说后者的性能和安全性更好。拷贝 C:\php.ini-recommended 并将其命名为 C:\php\php.ini。
[root@localhost /root/php-5.0.3] cp php.ini-recommended /opt/IBMIHS/conf/php.ini

Linux.5 在 httpd.conf 文件中添加一些指示原语
现在您需要在 IBM HTTP Server 配置文件 httpd.conf 中添加以下三行(如果您将 IBM HTTP Server 安装到了缺省位置,那么这个配置文件就是 /opt/IBMIHS/conf/httpd.conf),您可以使用自己喜欢的编辑器编辑这个文件。您可以将这几行添加到任何位置,但是最好是将这三行内容添加到配置文件的所有 LoadModule 语句之后:
LoadModule php5_module modules/libphp5.so
AddType application/x-httpd-php .php .php3 .phtml
AddType application/x-httpd-php-source .phps

Linux.6 重新启动 IBM HTTP Server 以应用这种修改。
现在 重新启动 IBM HTTP Server
[root@localhost /root] /opt/IBMIHS/bin/apachectl restart

下一个步骤是显示一个 PHP 页面。

检查 PHP 安装是否正确

本节中的步骤是创建一个使用 PHP 的页面,并显示这个页面。在 Windows 和 Linux 上,不一样的只是这个页面的位置,而不是内容。

虽然您可能已经有 PHP 页面了,但是如果您还没有的话,可以使用下面的完全独立的 PHP 脚本,它的内容很少,但是可以输出很多内容:

<? echo phpinfo(); ?>

将这一行 21 个字符插入一个文件中,将其命名为 test.php,并将这个文件放到 IBM HTTP Server 可以找到并加载的地方。这个文件的正确位置请参阅后文。

Win.1 在 Windows 上定位 test.php 文件。
如果您是使用英语作为缺省安装语言来安装的 IBM HTTP Server,那么它就位于目录 C:\Program Files\IBM HTTP Server 2.0\htdocs\en_US 中。如果您是使用一种不同的缺省语言来安装的 IBM HTTP Server,那么最终的目录名就会指向一种不同的语言。无论是哪种情况,保存这个文件的位置都是由 IBM HTTP Server 配置文件 C:\Program Files\IBM HTTP Server 2.0\conf\httpd.conf 的 DocumentRoot 原语指定的。
Linux.1 在 Linux 上定位 test.php。
如果您使用英文作为缺省语言安装了 IBM HTTP Server,那么这个文件就在 /opt/IBMIHS/htdocs/en_US 目录中。如果您使用其他语言安装了 IBM HTTP Server,那么这个目录名的最后部分就是另外一种语言。不管是哪种情况,这个文件所在的目录都是由 IBM HTTP Server 的配置文件 /opt/IBMIHS/conf/httpd.conf 中的 DocumentRoot 原语指定的。

现在启动一个浏览器,并访问 http://localhost/test.php。幸运的话,您就会看到一个如下所示的屏幕。


图 3. test.php 脚本的输出
phpinfo()

如果您没有看到上面的 phpinfo 屏幕,那么您最可能看到的两件事情是:

  • 一个屏幕,其中包含了您所输入的 php 文本: <? echo phpinfo(); ?>。当我们忘记重新启动 IBM HTTP Server 时就会看到这个屏幕,因为 IBM HTTP Server 还没有应用我们对 httpd.conf 所做的修改,因此并不知道 .php 应该使用 PHP 解释器来运行。
  • 一个完全空白的屏幕(如果您看一下这个页面的源代码,尽管其中的确包含一些 HTML 标签,但是却看不到内容)。如果所输入的 test.php 脚本中有错误,那就会看到这个页面。在这种情况中,我们会在IBM HTTP Server 的错误日志文件中看到一条有用的错误消息,其中包含“...PHP Parse error: syntax error in ... test.php”的字样。错误日志文件在 Windows 上位于 C:\Program Files\IBM HTTP Server 2.0\logs\error.log 中,在 Linux 上是 /opt/IBMIHS/logs/error.log 中。

    您可能会认为如果这条消息能写回到浏览器窗口中就更有用了,但是我们选择使用 php.ini-recommended 文件而不是 php.ini-dist 作为 php.ini 文件的基础是经过深思熟虑的。将错误消息写入错误日志文件而不是浏览器对于安全性是很好的设计,这样就不会暴露服务的设置信息。如果您希望将这个错误消息发送会浏览器,则可以使用 php.ini-dist 作为 php.ini 的基础。

如果您按照本文的介绍到达了这里,那么您就已经有了一个可以正常工作的 IBM HTTP Server 和 PHP 系统,并准备好配置 PHP 与 MySQL 进行通信了。

配置 PHP 来访问 MySQL

本节的步骤是确保 PHP 可以找到 MySQL 库。这个步骤只对于 Windows 来说是必需的。在 Linux 上,链接关系是在编译 PHP 解释器时创建的。

以下步骤仅适用于 Windows:

Win.1 配置 php.ini 文件,使 PHP 可以找到 MySQL
现在您要确保 PHP 知道如何找到并加载可以与 MySQL 进行通信的 PHP 扩展信息。编辑 php.ini 文件,并执行以下操作:

找到指定 php_mysql.dll 扩展的那一行,并删除前面的分号使它不再被注释掉。修改后,应该与下面的 php.ini 文件类似:

;extension=php_msql.dll
extension=php_mysql.dll
;extension=php_oci8.dll

设置 extension_dir 变量,确保可以找到 PHP 扩展。在这个文件的稍微前面一点您应该可以看到这个变量,缺省设置为“./”。将其修改为您安装 php 扩展的目录,如下所示:

extension_dir = "c:\php\ext"

Win.2 确保可以加载 MySQL DLL。
PHP 到 MySQL 连接的另外一半是 MySQL 库 libmysql.dll,它位于 C:\php\ext 中。当启动 IBM HTTP Server 时,Windows 需要使用普通的 DLL 加载过程来加载这个库。正如前面介绍的一样,您有一个选择:可以将 C:\php\ext 加入 PATH 变量中,也可以将这个 DLL 拷贝到包含 IBM HTTP Server 可执行程序的目录 C:\Program Files\IBM HTTP Server 2.0\bin 中。
Win.3 重新启动 IBM HTTP Server
现在您要重新启动 IBM HTTP Server,以便 PHP 可以重新读取 php.ini 文件。

不幸的是,在最后这几个步骤中太容易犯错了。如果您看到“Unable to load dynamic link library...php_mysql.dll”消息,就可能是因为如此。我们很难给出非常清楚的建议,但是有一件事情要牢记:即使 php_mysql.dll 的确存在,这条消息也可能会出现,因为它不能找到 libmysql.dll。

安装 phpMyAdmin

本节的步骤是将 phpMyAdmin PHP 代码解压到一个 IBM HTTP Server 可以加载的位置,并指定 MySQL root 密码,这个密码是您在前面的步骤中在 phpMyAdmin 配置文件中指定的。

虽然安装 phpMyAdmin 并不是必需的,但是这是一种非常有效的测试 PHP 和 MySQL 之间连接的方法,在整个课程中,您很可能会希望使用它。由于 phpMyAdmin 就是一个 PHP 应用程序,因此其代码在 Windows 和 Linux 上完全相同。惟一不同的是这些文件要放到的位置。

在 Windows 上:

Win.1 解压 phpMyAdmin 的代码
解压 phpMyAdmin 的压缩文件,并将内容拷贝到一个 IBM HTTP Server 可以找到的地方:正如前面介绍的一样,如果您是使用英语作为缺省语言安装的 IBM HTTP Server,那么就是 C:\Program Files\IBM HTTP Server 2.0\htdocs\en_US,否则这个目录名的最后部分会稍有不同。将其拷贝并重命名,使得目录名中不包含 2.6.0-pl3,这样,精确的目录结构就是 C:\Program Files\IBM HTTP Server 2.0\htdocs\en_US\phpMyAdmin\index.php。
Win.2 在 phpMyAdmin 配置文件中输入 MySQL root 密码。
现在您需要编辑 phpMyAdmin 配置文件,使它知道您在前面步骤中输入的 MySQL 的 root 密码:

编辑 C:\Program Files\IBM HTTP Server 2.0\htdocs\en_US\phpMyAdmin\config.inc.php 文件,在 84 行附近,您会看到有一行指定了 root 用户和密码。我们的这段文件如下所示,其中对所添加的密码进行了高亮显示:

$cfg['Servers'][$i]['auth_type']     = 'config';    // ...
$cfg['Servers'][$i]['user']          = 'root';      // ...
$cfg['Servers'][$i]['password']      = 'root';       // ...
                                                    // ...

在 Linux 上:

Linux.1 下载并解压 phpMyAdmin 代码
从参考资料部分所提供的链接中下载 phpMyAdmin(phpMyAdmin-2.6.0-pl3.tar.bz2),并将其解压到 IBM HTTP Server 的 htdocs 目录中,方法如下。正如前面介绍的一样,如果您是使用英语作为缺省语言安装的 IBM HTTP Server,那么这个目录就是 /opt/IBMIHS/htdocs/en_US,否则目录名的最后部分可能会稍有不同。
[root@localhost /opt/IBMIHS/htdocs/en_US] tar -xjvf /root/phpMyAdmin-2.6.0-pl3.tar.bz2

我们对其重新进行命名,使得目录名中不包含 2.6.0-pl3,这样,精确的目录结构就是 /opt/IBMIHS/htdocs/en_US/phpMyAdmin/index.php。
Linux.2 在 phpMyAdmin 的配置文件中输入 MySQL root 密码。
现在您需要编辑 phpMyAdmin 配置文件,使它知道您在前面步骤中输入的 MySQL 的 root 密码:

编辑 /opt/IBMIHS/htdocs/en_US/phpMyAdmin/config.inc.php 文件,在 84 行附近,您会看到有一行指定了 root 用户和密码。我们的这段文件如下所示,其中对所添加的密码进行了高亮显示:

$cfg['Servers'][$i]['auth_type']     = 'config';    // ...
$cfg['Servers'][$i]['user']          = 'root';      // ...
$cfg['Servers'][$i]['password']      = 'root';       // ...
                                                    // ...

现在您应该可以连接到 http://localhost/phpMyAdmin/index.php 上了。幸运的话,您会看到下面的屏幕:


图 4. phpMyAdmin 初始屏幕
phpMyAdmin 屏幕

您看到的内容还有两种可能。这都是由于一些只在 Windows 上会出现的问题引起的:

  • 如果您运气不好,会看到以错误 1251 开始的一条消息,如果您正在 Windows 上使用 MySQL 4.1 和 PHP 5.0.3,就会碰到这个错误。您可以回想一下我们就是由于这个原因才倒退回 MySQL 4.0 的。
  • 一个带有“cannot load mysql extension”消息的屏幕。如果 PHP 不能找到并加载 PHP 对 MySQL 的扩展,就会出现这个问题。这可能是由于 php.ini 文件中的一个问题,也可能是由于 Windows 不能找到 MySQL 的一个库:php_mysql.dll 或 libmysql.dll。请重新阅读上面配置 PHP 访问 MySQL 一节的内容。

现在您已经准备好最后一个步骤了:安装 PHPNuke。

安装 PHPNuke

本节中的步骤是将 PHPNuke 代码解压到一个 IBM HTTP Server 可以加载的地方,在 MySQL 中创建 PHPNuke 数据库和表,并在 PHPNuke 的配置文件中指定 MySQL root 密码。

Windows 上精确的步骤如下:

Win.1 解压 PHPNuke 代码
第一个步骤是解压所下载的压缩文件,并将部分内容拷贝到适当的地方。解压后的版本包含一个 html 目录,它是 PHPNuke 的可执行 PHP 部分。我们将这个 html 目录拷贝到 IBM HTTP Server 的 htdocs 目录中,并将其重命名为“nuke”,这样我们就有了一个文件 C:\Program Files\IBM HTTP Server 2.0\htdocs\en_US\nuke\index.php
Win.2 创建 PHPNuke 数据库和表
现在您需要在 MySQL 中创建 PHPNuke 数据库。由于您只能使用 mysql 来创建表,因此尽管我们可以使用 phpMyAdmin 来简单地创建数据库,但是我们还是使用 mysql 来创建数据库。

下面这些命令会提示您输入之前指定的 MySQL root 密码。您还需要知道在哪儿找到包含创建 PHPNuke 表的 sql 命令。这个文件也在所解开的安装目录中。我们将 PHPNuke 解压到 C:\installs 中,这样就有了一个文件 C:\installs\phpnuke\sql\nuke.sql。这就是我们需要的文件。

与 MySQL 交互以创建数据库并创建 PHPNuke 表的命令如下所示:

C:\mysql\bin>mysql -u root -p 
Enter password: ****
Welcome....[text omitted]
mysql> create database nuke;
Query OK, 1 row affected (0.00 sec)
mysql> use nuke;
Database changed
mysql>source C:\installs\phpnuke\sql\nuke.sql
[string of Query OK messages]
mysql>exit
Bye
C:\mysql\bin>

Win.3 配置 PHPNuke,使其知道 MySQL root 密码
要做的最后一件事情是让 PHPNuke 知道您在安装 MySQL 时指定的密码,这样它就可以访问我们刚才创建的 nuke 数据库了。这个密码是在 config.php 中指定的,这个文件与 PHPNuke 的其他 PHP 文件位于同一个目录中,对于我们来说是 C:\Program Files\IBM HTTP Server 2.0\htdocs\en_US\nuke。将对 $dbpass 变量的赋值修改为下面高亮显示的内容:
$dbhost = "localhost";
$dbuname = "root";
$dbpass = "root";
$dbname = "nuke";
$prefix = "nuke";

Linux 上精确的步骤如下:

Linux.1 下载并解压 PHPNuke 代码
下载 PHPNuke 7.5(PHP-Nuke-7.5.zip)到 /root 目录中,然后在 /opt/IBMIHS/htdocs/en_US 中创建一个 nuke 目录,然后切换到这个目录中,并将所下载的文件直接解压到当前目录中:
[root@localhost /opt/IBMIHS/htdocs/en_US/nuke] unzip /root/PHP-Nuke-7.5.zip

Linux.2 创建 PHPNuke 数据库和表
现在您需要在 MySQL 中创建 PHPNuke 数据库。由于您只能使用 mysql 来创建表,因此尽管我们可以使用 phpMyAdmin 来简单地创建数据库,但是我们还是使用 mysql 来创建数据库。

下面这些命令会提示您输入之前指定的 MySQL root 密码。您还需要知道在哪儿找到包含创建 PHPNuke 表的 sql 命令。这个文件也在所解开的安装目录中。我们将 PHPNuke 解压到 IBM HTTP Server 的 htdocs 目录中,这样 SQL 命令就在 文件 C:\installs\phpnuke\sql\nuke.sql 中。

与 MySQL 交互以创建数据库并创建 PHPNuke 表的命令如下所示:

[root@localhost /opt/IBMIHS/htdocs/en_US/nuke] mysql --user=root --password=root
mysql> create database nuke;
mysql> use nuke;
mysql> source /opt/IBMIHS/htdocs/en_US/nuke/sql/nuke.sql

Linux.3 配置 PHPNuke,使其知道 MySQL root 密码
要做的最后一件事情是让 PHPNuke 知道您在安装 MySQL 时指定的密码,这样它就可以访问我们刚才创建的 nuke 数据库了。这个密码是在 config.php 中指定的,这个文件与 PHPNuke 的其他 PHP 文件位于同一个目录中,对于我们来说是 /opt/IBMIHS/htdocs/en_US/nuke。将对 $dbpass 变量的赋值修改为下面高亮显示的内容:
$dbhost = "localhost";
$dbuname = "root";
$dbpass = "root";
$dbname = "nuke";
$prefix = "nuke";

如果使用 phpMyAdmin 来浏览数据库,您就可以看到这些表都已经创建好了。


图 5. 使用 phpMyAdmin 查看 PHPNuke 表
使用 phpMyAdmin 查看 PHPNuke 表

如果一切顺利,您就准备好浏览刚才安装并初始化的 PHPNuke 站点的初始页面了。切换到 http://localhost/nuke/index.php,您会看到下面的页面:


图 6. PHPNuke 初始页面
PHPNuke 初始页面

如果看不到这个屏幕,那么您就可能会看到一个屏幕说“There seems to be a problem with the MySQL server, ...”。当我们没有在 config.php 文件中正确指定数据库密码时就会看到这个错误,就像我们前面介绍的那几行一样。

现在,您可能想检查一下这个站点功能是否正常:创建一个用户,并在站点上张贴一些新闻;在 PHPNuke 的主页上,您会看到有一份指南来介绍如何实现这些功能。现在我们已经证明 PHPNuke 可以在 IBM HTTP Server 上正确安装并良好运行了,因此本文就到此为止了。





回页首


结束语

使用 IBM HTTP Server 运行 PHP 程序与使用开源的 Apache Web 服务器一样简单,因为 IBM HTTP Server 就是 Apache 加上了一些其他特性。如果这些特性对于您来说很有价值,而且不提供源代码对您来说并不什么问题,那么您就可以选择 IBM HTTP Server。一个很出名的应用程序 PHPNuke 在 IBM HTTP Server 上与在 Apache 上运行得一样好。虽然我们在这里并没有展示,但是另外一个著名的内容管理/门户系统 Mambo 也可以在 IBM HTTP Server 上很好地运行。实际上,假设您一定要使用一些 PHP 扩展(它们知道只在 IBM HTTP Server 2.0 上调用一些线程安全的 C 库),或者只是简单地使用 IBM HTTP Server 1.3,那么您就应该可以在 IBM HTTP Server 上很好地部署您的 PHP 应用程序。



参考资料



作者简介

Matthew Peters photo

Matthew Peters 在英国 Hursley 的 IBM 开发实验室工作。他曾经参与开发了 IBM CICS 和 MQSeries 产品,并曾与科学技术计算和大型并行处理领域的业务伙伴合作过多年。最近他在从事 IBM JVM 的垃圾收集器开发。Matthew 拥有剑桥大学女王学院的数学学位和牛津大学的软件工程博士学位。


Caroline Maynard photo

Caroline Maynard 在英国 Hursley 的 IBM 开发实验室工作,先后从事过不同领域的工作,其中包括网络、图形学和语音。她最近领导了 IBM Java ORB 的开发,奠定了 WebSphere 应用程序服务器 EJB 容器的基础。她对 IBM 产品和开放源代码 LAMP(Linux、Apache、MySQL 和 PHP/Perl/Python)技术的集成感兴趣。Caroline 拥有苏塞克斯大学的数学学位。


Graham Charters photo

Graham Charters 在英国 Hursley 的 IBM 开发实验室工作。他曾经从事过 WebSphere 应用程序服务器开发,负责 WebSphere Business Integration 和 Adapters 的架构。他目前对开放源代码技术颇感兴趣,比如 LAMP(Linux、Apache、MySQL、PHP/Perl/Python)和 IBM WebSphere 平台的关系。Graham 拥有曼彻斯特大学的计算机科学、数值分析和机器视觉学位。


Anantoju V Srinivas 照片

Anantoju Veera Srinivas 在印度 Bangalore 的 IBM 开发实验室工作。他曾经从事过 Linux/AIX? 平台上的 JVM 的开发工作。他目前对 Web 技术和数据库技术颇感兴趣,比如开源的 LAMP(Linux、Apache、MySQL、PHP/Perl/Python)和 IBM 的 WebSphere/DB2 平台。Srini 拥有印度 Andhra Pradesh 的 Sri Venkateshwara 大学的电子工程学位。




对本文的评价

太差! (1)
需提高 (2)
一般;尚可 (3)
好文章 (4)
真棒!(5)

建议?







回页首


Java 和所有基于 Java 的商标是 Sun 公司在美国和/或其他国家的商标。 Microsoft、Windows、Windows NT 和 Windows 标志是 Microsoft 公司在美国和/或其他国家的商标。 Linux 是 Linus Torvalds 在美国和/或其他国家的商标。 其他公司、产品或服务名称可能是其他公司的商标或服务标志。 其他公司、产品或服务的名称可能是其他公司的商标或服务标志。

IBM 公司保留在 developerWorks 网站上发表的内容的著作权。未经IBM公司或原始作者的书面明确许可,请勿转载。如果您希望转载,请通过 提交转载请求表单 联系我们的编辑团队。
    关于 IBM 隐私条约 联系 IBM 使用条款