PHP 手册

Stig Sæther Bakken
Alexander Aulbach
Egon Schmid
Jim Winstead
Lars Torben Wilson
Rasmus Lerdorf
Andrei Zmievski
Jouni Ahto

编辑

穆少磊
肖盛文
宋琪
李达
黄啸宇
王远之
陈伯乐
崔岩
刘铭
肖理达
周皓
孙虑

07-01-2004

版权信息

© Copyright 1997 - 2003 本手册版权归 PHP Documentation Group 所有。发布本资料须遵守开放出版物许可协议 1.0 或者更新的版本中所宣布的条款(在 http://www.opencontent.org/openpub/ 可获得最新的版本)。

未经版权所有者明确授权,禁止发布本文档及其独立存在地修改版本。

未经版权所有者正式授权,禁止将本文档及其派生物以标准(纸质)书籍的形式出版。

本手册首页列有 PHP 文档小组成员名单。如果您需要联系改小组成员,请发电子邮件到 phpdoc@lists.php.net

本手册“Extending PHP 4.0”有关章节的版权归 © 2000 Zend Technologies, Ltd 所有。发布本资料须遵守开放出版物许可协议 1.0 或者更新的版本中所宣布的条款(在 http://www.opencontent.org/openpub/ 可获得最新的版本)。


目录
序文
I. 入门指引
1. 简介
2. 简明教程
3. 安装
4. 运行时配置
II. 语言参考
5. 基本语法
6. 类型
7. 变量
8. 常量
9. 表达式
10. 运算符
11. 流程控制
12. 函数
13. 类与对象
14. 引用的解释
III. 安全
15. 安全
IV. 特点
16. 用 PHP 进行 HTTP 认证
17. Cookies
18. 文件上传处理
19. 使用远程文件
20. 连接处理
21. 数据库永久连接
22. 安全模式
23. PHP 的命令行模式
V. 函数参考
I. Apache 函数库
II. 数组函数库
III. Aspell functions [deprecated]
IV. BCMath Arbitrary Precision Mathematics Functions
V. Bzip2 Compression Functions
VI. Calendar functions
VII. CCVS API Functions
VIII. Windows 的 COM 支持函数库
IX. 类/对象函数库
X. ClibPDF functions
XI. Crack functions
XII. CURL, Client URL Library Functions
XIII. Cybercash payment functions
XIV. Cyrus IMAP administration functions
XV. Character type functions
XVI. Database (dbm-style) abstraction layer functions
XVII. 时间日期函数库
XVIII. dBase functions
XIX. DBM Functions [deprecated]
XX. dbx functions
XXI. DB++ Functions
XXII. Direct IO functions
XXIII. 目录函数库
XXIV. DOM XML functions
XXV. .NET functions
XXVI. Error Handling and Logging Functions
XXVII. File alteration monitor functions
XXVIII. FrontBase Functions
XXIX. filePro functions
XXX. 文件系统函数库
XXXI. Forms Data Format functions
XXXII. FriBiDi functions
XXXIII. FTP 函数库
XXXIV. Function Handling functions
XXXV. Gettext
XXXVI. GMP functions
XXXVII. HTTP 相关函数库
XXXVIII. Hyperwave functions
XXXIX. Hyperwave API functions
XL. iconv functions
XLI. 图像函数库
XLII. IMAP, POP3 and NNTP functions
XLIII. Informix functions
XLIV. InterBase functions
XLV. Ingres II functions
XLVI. IRC Gateway Functions
XLVII. PHP / Java Integration
XLVIII. LDAP functions
XLIX. Mail functions
L. mailparse functions
LI. 数学函数库
LII. Multi-Byte String Functions
LIII. MCAL functions
LIV. Mcrypt Encryption Functions
LV. MCVE Payment Functions
LVI. Mhash Functions
LVII. Mimetype Functions
LVIII. Microsoft SQL Server functions
LIX. Ming functions for Flash
LX. Miscellaneous functions
LXI. mnoGoSearch Functions
LXII. mSQL functions
LXIII. MySQL 函数库
LXIV. Improved MySQL Extension
LXV. Mohawk Software session handler functions
LXVI. muscat functions
LXVII. Network Functions
LXVIII. Ncurses terminal screen control functions
LXIX. Lotus Notes functions
LXX. NSAPI-specific Functions
LXXI. Unified ODBC functions
LXXII. Object Aggregation/Composition Functions
LXXIII. Oracle 8 函数库
LXXIV. OpenSSL functions
LXXV. Oracle 函数库
LXXVI. Ovrimos SQL functions
LXXVII. 输出控制函数
LXXVIII. Object property and method call overloading
LXXIX. PDF functions
LXXX. Verisign Payflow Pro functions
LXXXI. PHP Options&Information
LXXXII. POSIX functions
LXXXIII. PostgreSQL 数据库函数库
LXXXIV. Process Control Functions
LXXXV. Program Execution functions
LXXXVI. Printer functions
LXXXVII. Pspell Functions
LXXXVIII. GNU Readline
LXXXIX. GNU Recode functions
XC. 正则表达式函数库(Perl 兼容)
XCI. qtdom functions
XCII. 正则表达式函数库(POSIX 扩展)
XCIII. Semaphore, Shared Memory and IPC Functions
XCIV. SESAM database functions
XCV. Session handling functions
XCVI. Shared Memory Functions
XCVII. SQLite
XCVIII. Shockwave Flash functions
XCIX. SNMP 函数库
C. Socket functions
CI. Stream functions
CII. 字符串处理函数库
CIII. Sybase functions
CIV. tidy Functions
CV. Tokenizer functions
CVI. URL 函数库
CVII. 变量函数库
CVIII. vpopmail functions
CIX. W32api 函数库
CX. WDDX Functions
CXI. XML 语法解析函数库
CXII. XML-RPC 函数库
CXIII. XSLT functions
CXIV. YAZ functions
CXV. YP/NIS Functions
CXVI. Zip File Functions (Read Only Access)
CXVII. Zlib Compression Functions
VI. Zend API
24. Overview
25. Extension Possibilities
26. Source Layout
27. PHP's Automatic Build System
28. Creating Extensions
29. Using Extensions
30. Troubleshooting
31. Source Discussion
32. Accepting Arguments
33. Creating Variables
34. Duplicating Variable Contents: The Copy Constructor
35. Returning Values
36. Printing Information
37. Startup and Shutdown Functions
38. Calling User Functions
39. Initialization File Support
40. Where to Go from Here
41. Reference: Some Configuration Macros
42. API Macros
VII. PHP API: 扩展开发接口
43. Streams API for PHP Extension Authors
VIII. FAQ: 常见问题
44. 一般信息
45. 邮件列表
46. 获取 PHP
47. 数据库问题
48. 安装
49. 编译问题
50. 使用 PHP
51. PHP 和 HTML
52. PHP 和 COM
53. PHP 和其它语言
54. 从 PHP/FI 2 移植到 PHP 3
55. 从 PHP 3 移植到 PHP 4
56. 杂类问题
IX. 附录
A. PHP 及其相关工程的历史
B. 从 PHP 3 移植到 PHP 4
C. 从 PHP/FI 2 移植到 PHP 3
D. PHP 的调试
E. 扩展 PHP 3
F. 函数别名列表
G. 保留字列表
H. 资源类型列表
I. 支持的协议/封装协议列表
J. 所支持的套接字传输器(Socket Transports)列表
K. PHP 类型及比较符表
L. 解析器代号列表
M. 关于本手册
N. Open Publication License
O. 函数索引
P. 补充说明

序文

PHP,即“PHP: Hypertext Preprocessor”,是一种广泛用于 Open Source(开放源代码)的尤其适合 Web 开发并可以嵌入 HTML 的多用途脚本语言。它的语法接近 C,Java 和 Perl,而且容易学习。该语言的主要目标是让 Web 开发人员快速的书写动态生成的网页,然而,PHP 的功能并不局限于此。

本手册基本上由函数参考组成,此外包括语言参考、PHP 主要特点以及其它补充信息

您可以在 http://www.php.net/download-docs.php 下载这个手册的几种格式的版本。关于手册开发的更多信息,请参阅附录:“关于本手册”。

I. 入门指引


章 1. 简介

PHP 是什么?

PHP(“PHP: Hypertext Preprocessor”,超文本预处理器的字母缩写)是一种被广泛应用的开放源代码的多用途脚本语言,它可嵌入到 HTML中,尤其适合 WEB 开发。

以上是一个简单的回答,不过这是什么意思呢?请看如下例子:

例子 1-1. 一个介绍性的范例

<html>
    <head>
        <title>Example</title>
    </head>
    <body>

        <?php 
        echo "Hi, I'm a PHP script!"; 
        ?>

    </body>
</html>

请注意这个范例和其它用 C 或 Perl 语言写的脚本之间的区别——与用大量的命令来编写程序以输出 HTML 不同的是,我们用 PHP 编写了一个 HTML 脚本,其中嵌入了一些代码来做一些事情(例如,在本例中我们输出了一些文本)。PHP 代码被特殊的起始符和结束符包含,使得您可以进出“PHP 模式”。

和客户端的 JavaScript 不同的是,PHP 代码是运行在服务端的。如果您在您的服务器上建立了如上例类似的代码,则在运行该脚本后,客户端就能接收到其结果,但他们无法得知其背后的代码是如何运作的。您甚至可以将 WEB 服务器设置成让 PHP 来处理所有的 HTML 文件,这么一来,用户就无法得知服务端到底做了什么。

使用 PHP 的一大好处是它对于初学者来说及其的简单,同时也给专业的程序员提供了各种高级的特性。当您看到 PHP 长长的特性列表时,请不要害怕。您可以很快的入门,只需几个小时您就可以自己写一些简单的脚本。

尽管 PHP 的开发是以服务端脚本为目的地,但事实上其功能远不局限与此。请继续读后面的章节,在“PHP 能做什么?”一节中您将获得更多的信息。


PHP 能做什么?

PHP 能做任何事。PHP 主要是用于服务端的脚本程序,因此您可以用 PHP 来完成任何其它的 CGI 程序能够完成的工作,例如收集表单数据,生成动态网页,或者发送/接收 Cookies。但 PHP 的功能远不局限于此。

PHP 脚本主要用于以下三个领域。

  • 服务端脚本。这是 PHP 最传统,也是最主要的目标领域。开展这项工作您需要具备以下三点:PHP 解析器(CGI 或者服务器模块)、WEB 服务器和 WEB 浏览器。您需要在运行 WEB 服务器时,安装并配置 PHP,然后,可以用 WEB 浏览器来访问 PHP 程序的输出,即浏览服务端的 PHP 页面。请查阅“安装”一章以获取更多信息。

  • 命令行脚本。您可以编写一段 PHP 脚本,并且不需要任何服务器或者浏览器来运行它。通过这种方式,您仅仅只需要 PHP 解析器来执行。这种用法对于依赖 cron(Unix 或者 Linux 环境)或者 Task Scheduler(Windows 环境)的日常运行的脚本来说是理想的选择。这些脚本也可以用来处理简单的文本。请参阅“PHP 的命令行模式”以获取更多信息。

  • 编写客户端的 GUI 应用程序。对于基于窗口式的应用程序来说,PHP 或许不是一种最好的语言,但是如果您非常精通 PHP,并且希望在您的客户端应用程序中使用 PHP 的一些高级特性,您可以利用 PHP-GTK 来编写这些程序。用这种方法,您还可以编写跨平台的应用程序。PHP-GTK 是 PHP 的一个扩展,在通常发布的 PHP 包中并不包含它。如果您对 PHP-GTK 感兴趣,请访问其网站以获取更多信息。

PHP 能够用在所有的主流操作系统上,包括 Linux、Unix 的各种变种(包括 HP-UX、Solaris 和 OpenBSD)、Microsoft Windows、Mac OS X、RISC OS 等。今天,PHP已经支持了大多数的 WEB 服务器,包括 Apache、Microsoft Internet Information Server(IIS)、Personal Web Server(PWS)、Netscape 以及 iPlant server、Oreilly Website Pro Server、Caudium、Xitami、OmniHTTPd 等。对于大多数的服务器,PHP 提供了一个模块;还有一些 PHP 支持 CGI 标准,使得 PHP 能够作为 CGI 处理器来工作。

综上所述,使用 PHP,您可以自由地选择操作系统和 WEB 服务器。同时,您还可以在开发时选择使用面对过程和面对对象,或者两者混和的方式来开发。尽管 PHP 目前的版本还没有支持 OOP 所有的标准,但很多代码仓库和大型的应用程序(包括 PEAR 库)仅使用 OOP 代码来开发。

使用 PHP,您并不局限于输出 HTML。PHP 还能被用来动态输出图像、PDF 文件甚至 Flash 动画(使用 libswf 和 Ming)。您还能够非常简便的输出文本,例如 XHTML 以及任何其它形式的 XML 文件。PHP 能够自动生成这些文件,在服务端开辟出一块动态内容的缓存,可以直接把它们打印出来,或者将它们存储到文件系统中。

PHP 最强大最显著的特性之一,是它支持很大范围的数据库。您会发现利用 PHP 编写数据库支持的网页简单得难以置信。目前,PHP 支持如下数据库:

Adabas DIngresOracle (OCI7 and OCI8)
dBaseInterBaseOvrimos
EmpressFrontBasePostgreSQL
FilePro (read-only)mSQLSolid
HyperwaveDirect MS-SQLSybase
IBM DB2MySQLVelocis
InformixODBCUnix dbm

我们同时还有一个 DBX 扩展库使得您可以自由的使用该扩展库支持的任何数据库。另外,PHP 还支持 ODBC,即 Open Database Connection Standard(开放数据库连接标准),因此您可以连接任何其它支持该世界标准的数据库。

PHP 还支持利用诸如 LDAP、IMAP、SNMP、NNTP、POP3、HTTP、COM(Windows 环境)等不计其数的协议的服务。您还可以开放原始网络端口,使得任何其它的协议能够协同工作。PHP 支持和所有 WEB 开发语言之间的 WDDX 复杂数据交换。关于相互连接,PHP 已经支持了对 Java 对象的即时连接,并且可以将他们自由的用作 PHP 对象。您甚至可以用我们的 CORBA 扩展库来访问远程对象。

PHP 具有极其有效的文本处理特性,支持从 POSIX 扩展或者 Perl 正则表达式到 XML 文档解析。为了解析和访问 XML 文档,我们支持了 SAX 和 DOM 标准。您可以使用我们的 XSLT 扩展库来转换 XML 文档。

如果您将 PHP 用于电子商务领域,您会发现其 Cybercash payment、CyberMUT、VeriSign Payflow Pro 以及 CCVS 函数对于您的在线交易程序来所是非常有用的。

另外,我们还有很多其它有趣的扩展库。例如 mnoGoSearch 搜索引擎函数、IRC 网关函数、多种压缩工具(gzip、bz2)、日历转换、翻译……

由于在这里我们无法列出 PHP 所有的特性和可提供的便利,请您参阅“安装”以及“函数参考”等有关章节以获取关于这里提到的扩展库更多的信息。


章 2. 简明教程

本章我们将给出关于 PHP 的简明教程。虽然 PHP 的功能并不局限于生成动态的 WEB 页面,但本章的内容仅涉及于此。请查阅题为“PHP 能做什么?”一节以获取更多信息。

使用了 PHP 的 WEB 页面将被和通常的 HTML 页面一样处理,您可以用建立 HTML 页面的通常方法来建立和编辑它们。


我需要些什么?

在本教程中,我们假设您的服务器已经安装并运行了 PHP,所有以 .php 结尾的文件都将由 PHP 来处理。在大部分的服务器上,这是 PHP 的默认扩展名,不过,也请询问您的服务器管理员以确认。如果您的服务器支持 PHP,则您不需要做任何事情。您只用建立您的 .php 文件,并把他们放置到您的 WEB 目录中,服务器将神奇的自动为您解析这些文件。您不用编译任何东西,也不用安装任何其它的工具,您仅仅只需把这些使用了 PHP 的文件想象成简单的 HTML 文件,其中只不过多了一种新的标识符,在这里您可以做各种各样的事情。大多数的 WEB 主机都提供 PHP 的支持,如果您的主机不支持,您可以阅读“PHP 链接”一节中的资源来查找支持 PHP 的 WEB 主机。

我们假设您希望在本地机器开发以节约宝贵的带宽。在这种情况下,您需要安装一个诸如 Apache 的 WEB 服务器,当然还有 PHP。您可能还希望安装一个数据库,例如 MySQL。您可以单独安装它们,当然简单的方法是获取一个预先配置的安装包,用这个安装包,您只用点击几下鼠标,就可以自动的安装所有这些系统。在任何操作系统下建立有 PHP 支持的 WEB 服务器都十分简单,包括 Linux 和 Windiws。在 Linux 下,您会发现 rpmfindPBone 能够在获取 RPM 时为您提供帮助。


您的第一个 PHP 页面

在您的 WEB 服务器根目录(DOCUMENT_ROOT)下建立一个文件名为 hello.php,然后完成如下内容:

例子 2-1. 我们的第一个 PHP 脚本: hello.php

<html>
 <head>
  <title>PHP Tes</title>
 </head>
 <body>
 <?php echo "<p>Hello World</p>"; ?>
 </body>
</html>

在浏览器的地址栏里输入 URL 访问这个文件,在结尾加上“/hello.php”。如果您在本地开发,那么这个 URL 一般是 http://localhost/hello.php 或者 http://127.0.0.1/hello.php,当然这取决于 WEB 服务器的设置。这已经超出了本章的范围,请查阅您 WEB 服务器设置文件中 DocumentRootServerName 的有关内容。(Apache 的配置文件是 httpd.conf)。如果所有的设置都正确,那么这个文件将被 PHP 解析,浏览器中将会输出如下结果:

<html>
 <head>
  <title>PHP Test</title>
 </head>
 <body>
 <p>Hello World/<p>
 </body>
</html>

请注意这和 CGI 脚本不同,该文件不用制作成可执行脚本,它没有任何特殊的地方。您只需把它当作一个普通的 HTML 文档,只是里面多了一重新的标识符,使得您可以用它来做很多有趣的事情。

该程序非常的简单,它仅仅只是利用了 PHP 的 echo() 语句显示了 Hello World。您一定不会满足与此。

如果您试过了这个例子,但是没有得到任何地输出,或者您的浏览器弹出了下载框,或者浏览器以文本方式显示了源文件,可能的原因是您的服务器还没有支持 PHP。您需要请您服务器的管理员根据本手册“安装”一章的内容使得服务器支持 PHP。如果您在本地开发,请阅读手册有关安装的章节以确保所有的设置都正确。如果问题仍然存在,请通过 PHP 支持的各种方式获取帮助。

以上例子的目的是为了显示 PHP 特殊标识符的格式。在这个例子中,我们用 <?php 来表示 PHP 标识符的起始,然后我们放入 PHP 语句并通过加上一个终止标识符 ?> 来退出 PHP 模式。您可以根据您的需要在 HTML 文件中像这样开启或关闭 PHP 模式。请参阅手册中“PHP 基本语法”以获取更多信息。

关于文本编辑器: 有很多文本编辑器以及集成开发环境(IDEs)可以被用来建立、编辑和管理 PHP 文件。这些工具中的一部分被列在 PHP 编辑器列表中。如果您希望推荐其它的编辑器,请访问以上页面,并要求该页面的维护者将您推荐的编辑器加入到该列表中。使用支持语法高亮功能的浏览器会给您的开发带来很多帮助。

关于文字处理器: 诸如 StarOffice Writer、Microsoft Word 和 Abiword 的文字处理器不适合用来编辑 PHP 程序。如果您希望用以上这些工具的某一种来处理脚本,您必须保证将结果存成了纯文本(PLAIN TEXT)格式,否则 PHP 将无法读取并运行这些脚本。

关于 Windows 记事本: 如果您使用 Windows 记事本来编写 PHP 脚本,您需要注意在您保存文件时,文件的后缀名应该为 .php。(记事本将自动在文件名后面加上 .txt 后缀,除非您采取以下措施之一来避免这种情况。)当您保存文件时,系统会让你指定文件的文件名,这时请将您的文件名加上引号。(例如,“hello.php”。)或者,您也可以点击保存对话框中的“保存类型”下拉菜单,并将设置改为“所有文件”。这样您在输入文件名的时候就不用加引号了。

现在您已经成功建立了一个简单的 PHP 脚本。现在您可以建立一个最著名的 PHP 脚本。调用函数 phpinfo(),您将会看到很多有关您系统有用的信息,以及预定义变量、已经加载的 PHP 模块和设置信息。请花一些时间来查看这些重要的信息。


实用的脚本

现在让我们来编写一些更实用的脚本。我们将检查浏览页面的访问者用了什么类型的浏览器。要达到这个目的,我们需要检查用户的 agent 字符串,它是浏览器发送的 HTTP 请求的一部分。该信息被存储在一个变量中。在 PHP 中,变量总是以一个美元符开头。我们现在感兴趣的变量是 $_SERVER["HTTP_USER_AGENT"]

注: $_SERVER 是一个特殊的 PHP 保留变量,它包含了 WEB 服务器提供的所有信息,被称为自动全局变量(或“超级全局变量”)。请查阅本手册“自动全局变量”的有关内容,以获取更多信息。这些特殊的变量是在 PHP 4.1.0 版本引入的。在这之前,我们使用 $HTTP_*_VARS 数组,如 $HTTP_SERVER_VARS。尽管现在已经不用了,但它们在新版本中仍然存在。(参见旧代码中的注解。)

要显示该变量,我们只需简单地进行如下操作:

例子 2-2. 打印一个变量(数组元素)

<?php echo $_SERVER["HTTP_USER_AGENT"]; ?>

该脚本的输出可能是:

Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)

PHP 有很多种不同类型的变量。在以上例子中我们打印了一个数组的元素。数组是一类非常有用的变量。

$_SERVER 只是 PHP 自动全局化的变量之一。您可以查阅“保留变量”一节来查看这些变量的列表,或者也可以建立如下的文件来得到一个完整的列表:

例子 2-3. 利用 phpinfo() 来显示所有预定义变量

<?php phpinfo(); ?>

如果您在您的浏览器中打开这个文件,您将看到关于 PHP 完整的信息,以及所有您可以使用的变量列表。

您可以在一个 PHP 标识中加入多个 PHP 语句,也可以建立一个代码块来做比简单的 echo 更多的事情。例如,如果我们需要检查 Internet Explorer,我们可以进行如下操作:

例子 2-4. 结构控制函数的使用

<?php
if (strstr($_SERVER["HTTP_USER_AGENT"], "MSIE")) {
	echo "You are using Internet Explorer<br />";
}
?>

该脚本的输出可能是:

You are using Internet Explorer<br />

在这里我们要介绍一些新的原理。我们用了一个 if 语句。如果您对 C 语言的基本语法比较熟悉,则您应该对此很熟悉,否则,您可能需要拿起任何一本 PHP 介绍性的书籍并阅读前面的两三个章节,或者也可以阅读本手册的“语言参考”一章。您可以在 http://www.php.net/books.php 找到有关 PHP 的书籍的列表。

我们需要介绍的第二个原理,是对 strpos() 函数的调用。strpos() 是 PHP 的一个内建函数,其功能是在一个字符串中搜索另外一个字符串。例如我们现在需要在 $_SERVER["HTTP_USER_AGENT"](即所谓的 haystack) 变量中寻找 "MSIE"。如果在这个 haystack 中该字符串(即所谓的 needle)被找到,则函数返回 needle 在 haystack 中相对开头的位置;如果没有,则返回 FALSE。如果该函数没有返回 FALSE,则 if 会将条件判断为 TRUE 并运行其大括号 {} 内的代码;否则,则不运行这些代码。您可以自己尝试利用ifelse以及其它的函数,例如 strtoupper()strlen(),来建立类似的脚本。在本手册中,相关的页面也包含有范例。如果您对如何使用函数不是很确定,您可以阅读手册中有关“如何阅读函数定义”和“PHP 函数”的有关函数。

以下我们进一步显示如何进出 PHP 模式,甚至是在一个 PHP 代码块的中间:

例子 2-5. 混和 HTML 和 PHP 模式

<?php
if (strpos($_SERVER["HTTP_USER_AGENT"], "MSIE") !== false) {
?>
<h3>strpos must have returned non-false</h3>
<center><b>You are using Internet Explorer</b></center>
<?php
} else {
?>
<h3>strpos must have returned false</h3>
<center><b>You are not using Internet Explorer</b></center>
<?php
}
?>

该脚本的输出可能是:

<h3>strpos must have returned no-false</h3>
<center><b>You are using Internet Explorer</b></center>

和以上我们用一个 PHP 的 echo 语句来输出不同的是,我们跳出了 PHP 模式来直接写 HTML 代码。这里很值得注意的一点是,对于这两种情况而言,脚本的逻辑效率是相同的。在判断了 strpos() 函数的返回值是 TRUE 或是 FALSE,也就是判断了字符串 MSIE 是否被找到之后,最终只有一个 HTML 块被发送给浏览者。


处理表单

PHP 一个很有用的特点体现在它处理 PHP 表单的方式。您需要理解的非常重要的原理,是表单的任何元素都在您的 PHP 脚本中自动生效。请参阅本手册“PHP 之外的变量”以获取关于在 PHP 中使用表单的详细信息及范例。以下是 HTML 表单的范例:

例子 2-6. 一个简单的 HTML表单

<form action="action.php" method="POST">
 Your name: <input type="text" name="name" />
 Your age: <input type="text" name="age" />
 <input type="submit">
</form>

该表单中并没有什么特殊的地方,其中没有使用任何特殊的标识符。当用户填写了该表单并点击了提交按钮,页面 action.php 将被调用。在该文件中,您可以加入如下内容:

例子 2-7. 打印来自表单的数据

Hi <?php echo $_POST["name"]; ?>.
You are <?php echo $_POST["age"]; ?> years old.

该脚本的输出可能是:

Hi Joe.
You are 22 years old.

该脚本进行的工作应该已经很明显了,这儿并没有其它更复杂的内容。PHP 将自动为您设置 $_POST["name"]$_POST["age"] 变量。在这之前我们使用了自动全局变量 $_SERVER,现在我们引入了自动全局变量 $_POST,它包含了所有的 POST 数据。请注意我们的表单提交数据的方法(method)。如果我们能使用了 GET 方法,那么表单中的信息将被储存到自动全局变量 $_GET 中。如果您并不关心请求数据的来源,您也可以用自动全局变量 $_REQUEST,它包含了所有 GET、POST、COOKIE 和 FILE 的数据。请参阅 import_request_variables() 函数。


在新版本的 PHP 中使用旧的 PHP 代码

现在,PHP 已经发展成为一种流行的脚本语言,您可以在很多公共的资源里找到您可以在您自己的脚本中重新利用的代码。PHP 语言的开发者为向下兼容性下了很多功夫,因此在新版本的 PHP 下,老版本的代码应该可以在不作任何改动的情况下(理想地)运行。不过实际上,我们还是必须对老的代码做一些改动。

有可能影响到老版本的代码的最重要的两点改动分别是:

  • 取消了旧的 $HTTP_*_VARS 数组(在函数或者方法中他们原本是全局变量)。PHP 4.1.0 版本引入了如下自动全局数组变量$_GET$_POST$_COOKIE$_SERVER$_FILE$_ENV$_REQUEST 以及 $_SESSION。 老的 $HTTP_*_VARS 数组,诸如 $HTTP_POST_VARS 等,从 PHP 3 就已经开始使用,它们仍然存在。 在 PHP 5.0.0 中,长的 PHP 预定义数组可以通过设置 register_long_arrays 来屏蔽。

  • 外部变量不再默认得被注册为全局变量。也就是说,从 PHP 4.2.0 版本开始,$php.ini; 中的设置选项 register_globals 默认值变成了 off。我们建议您用以上提到的自动全局数组变量来访问这些值。但可能老的脚本、书籍以及教程都可能建立在该设置为 on 的基础上。如果该选项被设置为 on,则您便可以在 URL http://www.example.com/foo.php?id=42 中直接使用变量 $id。但不管被设置为 on 还是 off,$_GET['id'] 一直有效。

如果您希望了解关于这些改动的细节,请参阅“预定义变量”一节以及其中的超链接。


下一步做什么?

用您现在掌握的知识,您应该能够理解本手册中的大部分内容以及其中各式各样的脚本范例。在 php.net 网站的连接区 http://www.php.net/links.php 您能购获得其它更多的范例。

请查阅 PHP Conference 资料网站 http://conf.php.net/http://talks.php.net/ 以观看更多幻灯片,这些幻灯片展示了许多 PHP 其它的功能。


章 3. 安装


安装前的准备

安装前,首先您需要了解您需要 PHP 做什么。您可以在三个领域使用 PHP,正如 PHP 能做什么? 一节中所描述的:

  • 服务器端脚本运行

  • 命令行脚本运行

  • 客户端图形界面(GUI)程序

首先且最普遍的情况,您需要三样东西:PHP 自己,一个 Web 服务器和一个 Web 浏览器。您可能已经安装了 Web 浏览器,根据您安装操作系统的不同,您或许也已经安装好了 Web 服务器(例如,Linux 下的 Apache 或 Windows 下的 IIS)。或许您从某个公司租了些网站空间,如果是这样,您无须任何设置,便可以写 PHP 脚本,上传到您租的服务器空间中,并从浏览器中看到运行结果。

如果您需要自己设置服务器,您有两种将 PHP 连接到 Web 服务器的方法。对于大多数 Web 服务器 PHP 都有相应的模块接口(也叫做 SAPI)。这些服务器包括 Apache, 微软 Internet Information Server,Netscape 和 iPlanet 服务器。许多其它的服务器支持 ISAPI——微软模块接口(例如 OmniHTTPd 服务器)。如果 PHP 不支持作为您的 Web 服务器的模块,您总是能够将 PHP 作为 CGI 处理器使用的。这意味着您可以设置您的 Web 服务器使用命令行可执行文件 PHP(在 Windows 下是 php.exe)处理所有该服务器上的 PHP 文件请求。

如果您也对 PHP 命令行脚本感兴趣(例如,写一个脚本在离线的情况下自动生成一些图片,或者根据一些传递的命令行参数处理文本文件),您就需要命令行脚本运行功能。更多信息,请参考 撰写 PHP 命令行程序 一节。如果是这样的话,您不需要服务器和浏览器。

您也可以使用 PHP 的 PHP-GTK 扩展撰写客户端图形界面(GUI)程序。这与编写网页的方法有很大不同,因为您不输出任何 HTML,而是使用它们管理窗口和对象。更多关于 PHP-GTK 的信息,请 访问该扩展的网站。PHP-GTK 没有包含在官方 PHP 发布包中。

从这里开始往后,本节都将讲解如何在 Unix 和 Windows 下的 Web 服务器中使用模块和CGI方式安装 PHP。

下载 PHP,源代码和二进制发布包可以在 http://www.php.net/ 找到。我们建议您选择最靠近您地理位置的 镜像服务器 下载发布包。


在 Unix/HP-UX 系统上安装

本章节的内容和提示仅限于将 PHP 安装到 HP-UX 系统上。(此文章是由 paul_mckay at clearwater-it dot co dot 编写的)。

注: 本文涉及的技巧适用于 PHP 4.0.4 and Apache 1.3.9.

  1. 安装 PHP 你需要一个 gzip,你可以从如下地址得到该软件的二进制版本的发行包 http://hpux.connect.org.uk/ftp/hpux/Gnu/gzip-1.2.4a/gzip-1.2.4a-sd-10.20.depot.Z,下载后解压缩,并且使用 swinstall 安装。

  2. 安装 PHP 你需要 gcc,你可以从如下地址得到该软件的二进制版本的发行包 http://gatekeep.cs.utah.edu/ftp/hpux/Gnu/gcc-2.95.2/gcc-2.95.2-sd-10.20.depot.gz,解压缩这个文件,使用 swinstall 安装 gcc。

  3. 安装 PHP 你需要 GNU binutils,你可以从如下地址得到该软件的二进制版本的发行包 http://hpux.connect.org.uk/ftp/hpux/Gnu/binutils-2.9.1/binutils-2.9.1-sd-10.20.depot.gz,解压缩这个文件,使用 swinstall 安装 binutils。

  4. 安装 PHP 你需要 bison,你可以从如下地址得到该软件的二进制版本的发行包 http://hpux.connect.org.uk/ftp/hpux/Gnu/bison-1.28/bison-1.28-sd-10.20.depot.gz,安装方式同上。

  5. 安装 PHP 你需要 flex,你需要从 http://www.gnu.org 的镜像站点下载一个该软件的源代码。它被放置于一个 非 gnu 目录的 ftp 服务器上。下载这个文件,并且使用 gunzip 解压缩,然后执行 tar -xvf。进入新创建的 flex 目录并运行 ./configure,再执行 make 以及 make install

    如果这里出现了错误,很可能是由于 gcc 等工具不在路径中,应将其添加到环境变量 PATH 中。

  6. 下载 PHP 和 apache 的源代码。

  7. 下载后对他们分别执行 gunziptar -xvf。在开始编译他们之前我们需要修改一些文件。

  8. 首先 configure 文件需要被修改,因为它似乎忘记自己是在 hpux 系统下了,有更好的方法解决此问题,但最省事的是在配置脚本的第 47286 行加入 lt_target=hpux10.20

  9. 其次是修改 Apache GuessOS 文件。在文件 apache_1.3.9/src/helpers 的第 89 行,将参数 echo "hp${HPUXMACH}-hpux${HPUXVER}"; exit 0 替换为 echo "hp${HPUXMACH}-hp-hpux${HPUXVER}"; exit 0

  10. 你不能把 PHP 作为共享对象方式安装到 HP-UX 因此你必须把他编译成为一个静态方式,参照 Apache 站点的指导就可以完成。

  11. 这样就完成了 PHP 和 Apache 的 安装编译,然而你的 Apache 将仍然不能启动,你必须为 Apache 配置一个新的用户名,例如 www 或 apache。然后修改你的 apache 配置文件 conf/httpd.conf 的 252 和 253 行,由原来的

    User nobody
    Group nogroup

    替换为类似如下的内容

    User www
    Group sys

    这是因为在 hp-ux 系统下, apache 不能作为 nobody 用户运行。按照上面的方式配置 Apache 和 PHP 就应该可以正常工作了。


Unix/Linux 安装

本节包含了在 Linux 发行版上安装 PHP 的说明和提示。


使用包

许多 Linux 发行版有某种类型的包安装系统,比如说 RPM。 这能够建立一个标准的配置,但当你需要一些不同特性(比如说安全服务器、不同的数据库驱动)时,你就需要安装 PHP 和 Web 服务器。如果你不熟悉怎样安装和编译你自己的软件,那么你可以去寻找,看是否有人已经制作了一个含有你所需要的 PHP 特性的包。


Unix/Mac OS X installs

This section contains notes and hints specific to installing PHP on Mac OS X Server.


Using Packages

There are a few pre-packaged and pre-compiled versions of PHP for Mac OS X. This can help in setting up a standard configuration, but if you need to have a different set of features (such as a secure server, or a different database driver), you may need to build PHP and/or your web server yourself. If you are unfamiliar with building and compiling your own software, it's worth checking whether somebody has already built a packaged version of PHP with the features you need.


Compiling for OS X server

There are two slightly different versions of Mac OS X, client and server. The following is for OS X Server.

Mac OS X server install.

  1. Get the latest distributions of Apache and PHP.

  2. Untar them, and run the configure program on Apache like so.
    ./configure --exec-prefix=/usr \
    --localstatedir=/var \
    --mandir=/usr/share/man \
    --libexecdir=/System/Library/Apache/Modules \
    --iconsdir=/System/Library/Apache/Icons \
    --includedir=/System/Library/Frameworks/Apache.framework/Versions/1.3/Headers \
    --enable-shared=max \
    --enable-module=most \
    --target=apache

  3. If you want the compiler to do some optimization., you may also want to add this line:
    setenv OPTIM=-O2

  4. Next, go to the PHP 4 source directory and configure it.
    ./configure --prefix=/usr \
        --sysconfdir=/etc \
        --localstatedir=/var \
        --mandir=/usr/share/man \
        --with-xml \
        --with-apache=/src/apache_1.3.12
    If you have any other additions (MySQL, GD, etc.), be sure to add them here. For the --with-apache string, put in the path to your apache source directory, for example /src/apache_1.3.12.

  5. Type make and make install. This will add a directory to your Apache source directory under src/modules/php4.

  6. Now, reconfigure Apache to build in PHP 4.
    ./configure --exec-prefix=/usr \
    --localstatedir=/var \
    --mandir=/usr/share/man \
    --libexecdir=/System/Library/Apache/Modules \
    --iconsdir=/System/Library/Apache/Icons \
    --includedir=/System/Library/Frameworks/Apache.framework/Versions/1.3/Headers \
    --enable-shared=max \
    --enable-module=most \
    --target=apache \
    --activate-module=src/modules/php4/libphp4.a
    You may get a message telling you that libmodphp4.a is out of date. If so, go to the src/modules/php4 directory inside your apache source directory and run this command: ranlib libmodphp4.a. Then go back to the root of the apache source directory and run the above configure command again. That'll bring the link table up to date. Run make and make install again.

  7. Copy and rename the php.ini-dist file to your bin directory from your PHP 4 source directory: cp php.ini-dist /usr/local/bin/php.ini or (if your don't have a local directory) cp php.ini-dist /usr/bin/php.ini.


Compiling for MacOS X client

Those tips are graciously provided by Marc Liyanage.

The PHP module for the Apache web server included in Mac OS X. This version includes support for the MySQL and PostgreSQL databases.

NOTE: Be careful when you do this, you could screw up your Apache web server!

Do this to install:

  1. Open a terminal window.

  2. Type wget http://www.diax.ch/users/liyanage/software/macosx/libphp4.so.gz, wait for the download to finish.

  3. Type gunzip libphp4.so.gz.

  4. Type sudo apxs -i -a -n php4 libphp4.so

  5. Now type sudo open -a TextEdit /etc/httpd/httpd.conf. TextEdit will open with the web server configuration file. Locate these two lines towards the end of the file: (Use the Find command)
    #AddType application/x-httpd-php .php 
    #AddType application/x-httpd-php-source .phps
    Remove the two hash marks (#), then save the file and quit TextEdit.

  6. Finally, type sudo apachectl graceful to restart the web server.

PHP should now be up and running. You can test it by dropping a file into your Sites folder which is called test.php. Into that file, write this line: <?php phpinfo() ?>.

Now open up 127.0.0.1/~your_username/test.php in your web browser. You should see a status table with information about the PHP module.


在 Unix/OpenBSD 系统上安装

本章节的内容和提示仅限于将 PHP 安装到 OpenBSD 3.4 系统上。


使用二进制包安装

使用二进制包安装 PHP 到 OpenBSD 系统上是被推荐的同时也是最简单的方法。PHP 核心包已经从其他模块中分离出来了并且每个模块可以被独立的安装/卸载而不影响其他模块。所有这些安装 PHP 需要的文件你可以在 OpenBSD 光盘或者在 FTP 站点上找到。

你需要安装的 PHP 核心包的文件是 php4-core-4.3.3.tgz,它包含了基本的引擎(包括 gettext 和 iconv)。其次,你可能还需要安装一些模块包,如:php4-mysql-4.3.3.tgzphp4-imap-4.3.3.tgz。你需要使用命令 phpxs 去激活它,并且在通过修改 php.ini 文件来屏蔽他们。

例子 3-1. 在 OpenBSD 系统下的软件包的安装示例

# pkg_add php4-core-4.3.3.tgz
# /usr/local/sbin/phpxs -s
# cp /usr/local/share/doc/php4/php.ini-recommended /var/www/conf/php.ini
  (add in mysql)
# pkg_add php4-mysql-4.3.3.tgz
# /usr/local/sbin/phpxs -a mysql
  (add in imap)
# pkg_add php4-imap-4.3.3.tgz
# /usr/local/sbin/phpxs -a imap
  (remove mysql as a test)
# pkg_delete php4-mysql-4.3.3
# /usr/local/sbin/phpxs -r mysql
  (install the PEAR libraries)
# pkg_add php4-pear-4.3.3.tgz

阅读packages(7) 的用户手册,可以得到更多的在 OpenBSD 系统下有关二进制软件包(binary packages)的信息.


使用软件包

你同样可以使用 软件包目录(ports tree)来编译 PHP 的源代码。然而,这样的安装方式仅仅是建议对 OpenBSD 非常熟悉的高级用户去做。PHP4 的软件包被分别分为了两个子目录:core 和 extensions。其中 extensions 目录产生了所有 PHP 所支持的子模块。如果你不希望创建并且使用这些模块中的某些模块,请使用 FLAVOR no_* 参数。例如,如果你希望跳过编译 imap 模块,设置 FLAVOR 为 no_imap 即可。


常见问题

  • 默认安装的 Apache 运行于 chroot(2) jail,将限制 PHP 脚本只能访问 /var/www 下面的文件。你需要建立 /var/www/tmp 目录来存放 PHP session 文件,或使用其它的 session 后端。此外,数据库套接字需要被放入 jail 或者侦听 localhost 接口。如果使用网络函数,某些 /etc 下面的文件例如 /etc/resolv.conf/etc/services 需要被移动到 /var/www/etc 中去。OpenBSD PEAR 包会自动安装到正确的 chroot 目录中,因此不需要作特殊改动。有关 OpenBSD Apache 的更多信息见 OpenBSD FAQ

  • 对应于 gd 扩展的 OpenBSD 3.4 包需要预先安装 XFree86。如果你不想用那些需要 X11 的字体特性,则安装 php4-gd-4.3.3-no_x11.tgz 包来替代之。


早期发布版本

早期的 OpenBSD 系统使用 FLAVORS 系统把 PHP 链接为静态形式。自从使用这种方法编译就造成了问题即:很难制作二进制软件包。你仍然可以使用早期 stable ports trees,但这种方式已经不被 OpenBSD 小组所支持。如果你对此有任何建议和意见,软件包当前的维护人是 Anil Madhavapeddy(avsm at openbsd dot org)。


Unix/Solaris 安装

本节包含了在 Solaris 系统上安装 PHP 的说明和提示。


需要的软件

默认安装的 Solaris 系统经常缺少 C 语言编译器和其相关工具。部分工具必须使用该工具的 GNU 版本,原因请阅读 FAQ。 下面是需要的软件:

  • gcc (推荐,其它 C 语言编译器也可以工作)

  • make

  • flex

  • bison

  • m4

  • autoconf

  • automake

  • perl

  • gzip

  • tar

  • GNU sed

此外,你还需要安装(可能编译)在你配置时定义的所有额外软件, 比如说 Oracle 或 MySQL。


使用包

你可以使用 pkgadd 来安装大部分你需要的软件来简化 Solaris 安装过程。


在 Unix 系统上安装

该节将指导你在 Unix 系统上一般配置和安装 PHP。 在安装之前,确定研究了任何与你平台或 web 服务器相关的章节。

预备知识和软件

  • 基本 Unix 技术(如果编译,能够操作 "make" 和一个 C 编译器)

  • 一个 ANSI C 编译器 (如果编译)

  • flex (用于编译)

  • bison (用于编译)

  • 一个 web 服务器

  • 任何模块特异组件(例如 gd、 pdf 库,等等)

有几种在 Unix 平台上安装 PHP 的方法,使用编译和配置的过程 ,或者通过大量的预打包的方式。本文主要关注编译和配置 PHP 的过程。

初始 PHP 安装和配置过程是使用 configure 脚本的命令行选项来控制的。本文概要了大部分通用选项,但是还有许多其它选项来玩耍。 查 完整的配置选项 来得到一个详尽的选项列表。 有几种安装 PHP 的方法。


Apache 模块快速参考

PHP 能够使用大量不同的方法编译,但是最常用的方式是作为 Apache 的模块。 下面是一个快速安装楷观。

例子 3-2. PHP 4 快速安装指导( Apache 模块版本)

1.  gunzip apache_1.3.x.tar.gz
2.  tar xvf apache_1.3.x.tar
3.  gunzip php-x.x.x.tar.gz
4.  tar xvf php-x.x.x.tar
5.  cd apache_1.3.x
6.  ./configure --prefix=/www
7.  cd ../php-x.x.x
8.  ./configure --with-mysql --with-apache=../apache_1.3.x --enable-ftp
9.  make
10. make install
11. cd ../apache_1.3.x
12. ./configure --activate-module=src/modules/php4/libphp4.a
13. make
14. make install
15. cd ../php-x.x.x
16. cp php.ini-dist /usr/local/lib/php.ini
17. 编辑你的 httpd.conf 或 srm.conf 文件增加:
      AddType application/x-httpd-php .php

18. 使用你的正常过程来重新启动 Apache 
服务器。(你必须停止和重新启动服务器,不仅仅是使用
 HUP 或 USR1 信号来使服务器重载。)

建立

当 PHP 被配置,你准备建立 CGI 执行文件,命令 make 将完成这个。 如果它失败了,你不能找出原因,请参看 问题 节。


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://www.microsoft.com/data/

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

  • 将 PHP 压缩包释放到你选择的目录中。c:\ 就不错。压缩包会被释放到一个类似 php-4.3.1-Win32 的新目录中,该目录最好被改名为 php。为方便以及版本无关起见,以下步骤中假定 PHP 位于 c:\php 中。可以选择其它的路径但最好不要用中间有空格的路径(例如:C:\Program Files\PHP 就不太好),如果这样做有些 Web 服务器会崩溃。解压缩后的 PHP 目录结构看上去像这样:

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 中的任何目录。

  • 最好是无论使用何种接口(CGI 或者 SAPI)都确保 php4ts.dll 可用,因此必须将此文件放到 Windows 路径中。最好的位置是 Windows 的 system 目录:

    c:\windows\system for Windows 9x/ME
    c:\winnt\system32 for Windows NT/2000 或者 c:\winnt40\system32 for Windows NT/2000 服务器版
    c:\windows\system32 for Windows XP

    如果计划在 c:\php\sapi 目录下使用 SAPI 模块而不想把 dll 文件拷贝到 Windows 的 system 目录,则可以将 php4ts.dll 拷贝到 sapi 目录下:c:\php\sapi

  • 下一步是设定有效的 PHP 配置文件,php.ini。压缩包中包括两个 ini 文件,php.ini-distphp.ini-recommended。建议使用 php.ini-recommended,因为此文件对默认设置作了性能和安全上的优化。仔细阅读此文件中的说明并研究 ini 设置 一章来亲自人工设定每个项目。如果要达到最佳的安全效果,则最好用这个文件,尽管 PHP 在默认的 ini 文件下也工作的很好。将选择的 ini 文件拷贝到 PHP 能够找到的目录下并改名为 php.ini。PHP 默认在 Windows 目录下搜索 php.ini

    在 Windows 9x/ME/XP 下将选择的 ini 文件拷贝到 %WINDIR%,通常为 c:\windows
    在 Windows NT/2000 下将选择的 ini 文件拷贝到 %WINDIR%%SYSTEMROOT% 下,通常为 c:\winntc:\winnt40 对应于服务器版本。

  • 如果在 Windows NT,2000 或 XP 中使用了 NTFS,确保运行 webserver 的用户名对 php.ini 有读取的权限(例如使其对 Everyone 可读)。

以下步骤为可选项。

  • 编辑 php.ini 文件。如果计划用 OmniHTTPd,不要进行下一步。将 doc_root 指向 webserver 的 document_root。例如:

    doc_root = c:\inetpub        // for IIS/PWS
    doc_root = c:\apache\htdocs // for Apache

  • 选择在 PHP 启动时需要加载的扩展库。如何设定以及那些已经内置请阅读 Windows 扩展一章。注意在新安装之后建议先确定 PHP 在没有任何扩展时运行正常然后再在 php.ini 中加载任何扩展库。

  • 在 PWS 和 IIS 下,可以设定 browscap 配置其指向 c:\windows\system\inetsrv\browscap.ini(Windows 9x/Me)或 c:\winnt\system32\inetsrv\browscap.ini(Windows NT/2000)或 c:\windows\system32\inetsrv\browscap.ini(Windows XP)。

按照这些指示已经完成了 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 文件:

  • 需要修改 extension_dir 设置将其指向扩展库所在的目录,或者放置 php_*.dll 文件的目录。不要忘记最后的斜线,例如:

    extension_dir = c:/php/extensions/

  • 通过取消 php.ini 文件中 extension=php_*.dll 行前面的注释来激活相应的扩展库。只要删除最前面的 ; 号就可以加载与其对应的扩展库。

    例子 3-3. 在 PHP-Windows 中激活 Bzip2 扩展

    // 将下面这一行从:
    ;extension=php_bz2.dll
    // 改成
    extension=php_bz2.dll

  • 某些扩展库需要附加的 dll 文件才能工作。其中一部分可以在压缩包中找到,在 c:\php\dlls\ 目录下,但有一些,例如 Oracle(php_oci8.dll)需要的 dll 没有在压缩包中绑定。将绑定的 dll 从 c:\php\dlls 目录拷贝到 Windows 路径中,例如:

    c:\windows\system for Windows 9x/Me
    c:\winnt\system32 for Windows NT/2000
    c:\windows\system32 for Windows XP

    如果这些文件已经安装在你的系统中,仅在不能正常工作的情况下覆盖它们(在覆盖之前,最好先将其备份,或者移动到其它目录 - 以防出错)。

注: 如果你运行 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 起内置


Servers-CGI/命令行

默认为将 PHP 编译为 CGI 程序。这将建立一个命令行解释器,可用于 CGI 处理或非 web 相关的 PHP 脚本。如果你运行着一个 PHP 模块支持的 webserver,那通常为性能考虑应该使用模块方式。不过,CGI 版可以使 Apache 用户用不同的 user-id 运行不同的 PHP 页面。如果你要以 CGI 方式运行 PHP 请确保阅读过了安全一章。

自 PHP 4.3.0 起,PHP 有了一些重要的新增功能。又有了一个新的 SAPI 称为 CLI,和 CGI 程序同名。根据配置选项它安装在 {PREFIX}/bin/php,并在手册中PHP 的命令行模式一章中有详细说明。更多细节请阅读该章节。


测试

如果将 PHP 编译为 CGI 程序,可以通过键入 make test 来测试你的编译。测试一下编译永远是个好主意。这样就可以在你的平台上及早捕捉到 PHP 的问题而不是以后再艰难地解决。


基准测试

如果将 PHP 3 编译为 CGI 程序,可以通过键入 make bench 来进行一下性能的基准测试。注意如果默认打开了安全模式,则如果超过 30 秒的允许范围测试可能不能完成。这是因为 set_time_limit() 不能用于安全模式。用 max_execution_time 配置选项来为你自己的脚本控制此时间限制。make bench 会忽略配置文件

注: make bench 仅能用于 PHP 3。


使用变量

某些服务器提供的环境变量没有定义在当前的 CGI/1.1 标准中。只有下列变量定义在其中,其它的都会被当作 'vendor extensions':AUTH_TYPE, CONTENT_LENGTH, CONTENT_TYPE, GATEWAY_INTERFACE, PATH_INFO, PATH_TRANSLATED, QUERY_STRING, REMOTE_ADDR, REMOTE_HOST, REMOTE_IDENT, REMOTE_USER, REQUEST_METHOD, SCRIPT_NAME, SERVER_NAME, SERVER_PORT, SERVER_PROTOCOL 和 SERVER_SOFTWARE。


Apache 服务器 1.x 版本

本节包括 Apache 下安装 PHP 的说明和提示,包括 UnixWindows 版本。我们在另外的页面也有 Apache 2 的安装和说明


Unix 下的 Apache 中安装 PHP 的详细资料

你可以根据完整配置选项列表在以下第 10 行中加入你选择的参数。这里把具体版本号略去了以确保本说明的不会出错。你需要把下面的 'xxx' 替换成你得到的文件中确切的数值。

例子 3-4. PHP 的 Apache 共享模块版本安装说明

1.  gunzip apache_xxx.tar.gz
2.  tar -xvf apache_xxx.tar
3.  gunzip php-xxx.tar.gz
4.  tar -xvf php-xxx.tar
5.  cd apache_xxx
6.  ./configure --prefix=/www --enable-module=so
7.  make
8.  make install
9.  cd ../php-xxx
10. 现在,配置你的 PHP。这是你定制 PHP 的不同选项的时候,例如要
    加载哪些扩展库。使用
      ./configure --help
    来列出可用的选项。在下面的示例中我们只是简单地配置 Apache 1
    和 MySQL 支持。你的 apxs 的路径可能和此示例中的不同。
      ./configure --with-mysql --with-apxs=/www/bin/apxs
11. make
12. make install
    如果在安装之后你决定修改配置选项,那么只需重复以上最后三步。
    只须重新启动 Apache 就可以使新模块生效。不需要重新编译 Apache。
    注意除非特别指出,'make install' 总是会安装 PEAR,各种 PHP
    工具例如 phpize,安装 PHP CLI 以及其它。
13. 建立你的 php.ini 文件。
      cp php.ini-dist /usr/local/lib/php.ini
    你可以编辑 php.ini 来设置 PHP 选项。如果你想把 php.ini 放在
    其它目录,在第 10 步加上以下选项:
      --with-config-file-path=/path
    如果你选择了 php.ini-recommended,确保阅读一下其中的变更说明,
    因为这些会影响到 PHP 的行为。
14. 编辑你的 httpd.conf 来加载 PHP 模块。在 LoadModule 语句右边的
    路径必须指向你系统中 PHP 模块所在的路径。上面的 make install
    步骤可能已经添加了,但还是检查确认一下。
    对 PHP 4:
      LoadModule php4_module        libexec/libphp4.so
    对 PHP 5:
      LoadModule php5_module        libexec/libphp5.so
15. 在 httpd.conf 中加入 AddModule 部分,在 ClearModuleList 下面的
    某处,加上这一句:
    对 PHP 4:
      AddModule mod_php4.c
    对 PHP 5:
      AddModule mod_php5.c
16. 告诉 Apache 将哪些后缀作为 PHP 解析。例如,让 Apache 把 .php
    后缀的文件解析为 PHP。可以将任何后缀的文件解析为 PHP,只要在
    以下语句中加入并用空格分开。我们添加一个 .phtml 来示例。
      AddType application/x-httpd-php .php .phtml
    为了将 .phps 作为 PHP 的源文件进行语法高亮显示,还可以加上:
      AddType application/x-httpd-php-source .phps
17. 用你通常的过程启动 Apache。(你必须完全停止 Apache 再重新启动,
    而不是用 HUP 或者 USR1 信号使 Apache 重新加载。)

根据你的 Unix 系统和 Apache 安装方法的不同,有很多方法停止和重启动 Apache。以下是一些不同的 Apache/Unix 下重启动 Apache 的典型命令。你需要把 /path/to/ 替换成你系统上的确切路径。

例子 3-5. 重启动 Apache 的示例命令

1. 在一些 Linux 和 SysV 的变种下:
/etc/rc.d/init.d/httpd restart

2. 使用 apachectl 脚本:
/path/to/apachectl stop
/path/to/apachectl start

3. httpdctl 和 httpsdctl(使用了 OpenSSL),类似 apachectl:
/path/to/httpsdctl stop
/path/to/httpsdctl start

4. 使用了 mod_ssl,或其他 SSL 服务器,你可能需要手工重启动:
/path/to/apachectl stop
/path/to/apachectl startssl

apachectl 和 http(s)dctl 程序所在的路径在不同系统中通常不一样。如果你的系统中有 locate 或者 whereis 或者 which 命令,那么可以帮你找到这些控制程序。

编译 PHP 和 Apache 的不同例子还有:

./configure --with-apxs --with-pgsql

这个配置将生成在 Apache 的 httpd.conf 文件中用 LoadModule 加载的 libphp4.so 共享库。而 PostgreSQL 支持将嵌入到 libphp4.so 库中。

./configure --with-apxs --with-pgsql=shared

这个配置将生成 Apache 的 libphp4.so 共享库,并且还生成 pgsql.so 共享库,可以在 php.ini 文件中用 extension 指令加载,或者在 PHP 脚本中用 dl() 函数明确地加载。

./configure --with-apache=/path/to/apache_source --with-pgsql

这个配置将生成 libmodphp4.a 库,mod_php4.c 和一些相关的文件并且拷贝到 Apache 源程序目录中的 src/modules/php4 目录下。然后用 --activate-module=src/modules/php4/libphp4.a 编译 Apache,Apache 编译系统会生成 libphp4.a 并且将其静态地连接到 httpd 程序中。PostgreSQL 支持也直接包括在这个 httpd 程序中了,因此最终结果是单一的一个包括了所有 Apache 和 PHP 支持的 httpd 可执行文件。

./configure --with-apache=/path/to/apache_source --with-pgsql=shared

这个配置和上面一样 - 除了没有在最后的 httpd 可执行文件中包括 PostgreSQL 的支持以及生成了一个 pgsql.so 共享库以外。该共享库可以在 php.ini 文件中或者用 dl() 函数加载。

当选择不同的方法编译 PHP 时,需要考虑每种方法的优势和缺点。用共享对象方式编译 PHP 意味着可以单独编译 Apache,并且不用在添加或修改了 PHP 的时候重新编译所有程序。用内置方法编译 PHP(静态方式)意味着 PHP 可以加载和运行得更快。更多信息见 Apache 的 DSO 支持页面

注: Apache 默认的 httpd.conf 文件中目前包括类似如下的内容:

User nobody
Group "#-1"

除非你把它修改成“Group nogroup”或者其它类似的(“Group daemon”也很通用),PHP 将不能打开文件。

注: 确认在使用 --with-apxs=/path/to/apxs 时指向 Apache 安装后的目录中的 apxs。绝对不能用 Apache 源程序中的 apxs 而要用安装后的 apxs。


Windows 下在 Apache 1.3.x 中安装 PHP

有两种方式使 PHP 工作于 Windows 下的 Apache 1.3.x。一种是 CGI 方式(php.exe),另一种是使用 Apache 模块 DLL。不管哪种方式都需要停止 Apache,编辑 httpd.conf 来配置 Apache 以加入PHP支持。

值得在这里指出现在 Windows 下的 SAPI 模块更加稳定了,我们推荐使用模块方式,因为更加透明和安全。

尽管有几种不同方法在 Apache 下配置 PHP,但是对新手来说还是非常简单易用的。有关更多的 httpd.conf 配置指令请参考 Apache 文档。

如果你按照手工安装步骤一节中的说明把 PHP 解压缩到了 c:\php\ 目录下,那么需要加入以下三行到 Apache 配置文件中以 CGI 方式安装:

  • ScriptAlias /php/ "c:/php/"

  • AddType application/x-httpd-php .php .phtml

  • Action application/x-httpd-php "/php/php.exe"

注意上面的第二行在原来的 httpd.conf 中就有的,不过被注释了。还有记住用你自己放置 PHP 的路径替换 c:/php/

警告

在 CGI 方式下,你的服务器可能会受到几种攻击的影响。阅