安装前需要考虑的事项 安装前,首先需要知道想用 PHP 来做什么。PHP 主要用在三个领域,分别在“ PHP 能做什么”一节中进行了描述: 网站和 web 应用程序(服务器端脚本) 命令行脚本 桌面(GUI)应用程序 在通常情况下,需要三样东西:PHP 自身、一个 web 服务器和一个 web 浏览器。可能已经有了一个 web 浏览器,并且根据操作系统的配置,也很可能已经有了一个 web 服务器(例如 Linux 和 MacOS 下的 Apache;Windows 下的 IIS)。也许在某个公司租用了 web 空间,这样,自己无需设置任何东西,仅需要编写 PHP 脚本,并上传到租用的空间中,然后在浏览器中查看结果。 如果需要自己配置服务器和 PHP,有两个方法将 PHP 连接到服务器上。对于很多服务器,PHP 均有一个直接的模块接口(也叫做 SAPI)。这些服务器包括 Apache、Microsoft Internet Information Server、Netscape 和 iPlanet 等服务器。其它很多服务器支持 ISAPI,即微软的模块接口(OmniHTTPd 就是个例子)。如果 PHP 不能作为模块支持 web 服务器,总是可以将其作为 CGI 或 FastCGI 处理器来使用。这意味着可以使用 PHP 的 CGI 可执行程序来处理所有服务器上的 PHP 文件请求。 如果对 PHP 命令行脚本感兴趣(例如在离线状态下,根据传递给脚本的参数,自动生成一些图片,或处理一些文本文件),总是需要命令行可执行程序。更多信息可以参考 PHP 的命令行模式。如果是这种情况,不需要服务器和浏览器。 还可以用 PHP 的 PHP-GTK 扩展来编写桌面图形界面应用程序。这与编写 web 页面完全不同,因为无需输出任何 HTML,而要管理窗口和窗口中的对象。关于 PHP-GTK 的更多信息,请 » 访问专门为该扩展建立的网站。PHP-GTK 没有包含在官方发布的 PHP 中。 现在,本节开始说明如何在 Unix 和 Windows 的 web 服务器中配置服务器模块接口和 CGI 可执行程序。也将在下面几节中了解到有关命令行可执行程序安装的信息。 PHP 源代码包和二进制包可以在 » http://www.php.net/downloads.php 找到。建议选择一个最近的 » 镜象服务器下载。
Unix 系统下安装和配置 PHP。在开始安装之前,请务必研究自己使用的系统和 web 服务器的相关章节。 在 安装前需要考虑的事项一节提到,在本节主要以 web 为中心介绍 PHP 的设置。不过本节也会覆盖一些 PHP 命令行用法的设置方法。 在 Unix 平台下安装 PHP 有几种方法:使用配置和编译过程,或是使用各种预编译的包。本文主要针对配置和编译 PHP 的过程。很多 Unix 类系统都有包安装系统,可以用它来设置一个有着标准配置的 PHP。但是若需要与标准配置不同的功能(例如一个安全服务器,或者不同的数据库驱动扩展模块),可能需要编译 PHP 和/或 web 服务器。如果不熟悉编译软件,可以考虑搜索一下是否有人已经编译了包含所需要功能的预编译包。 编译所需的知识和软件: 基础的 Unix 技能(有能力操作“make”和一种 C 语言编译器) 一个 ANSI C 语言编译器 flex:版本 2.5.4 bison:版本 1.28(推荐)、1.35 或 1.75 一个 web 服务器 模块特别需要的组件(例如 gd、pdf 库等) PHP 初始的配置和安装过程被 configure 脚本中一系列命令行选项控制。可以通过 ./configure --help 命令了解 PHP 所有可用的编译选项及简短解释。本手册是分开对这些选项编写文档的。可在附录中找到核心配置选项,而扩展模块特定的配置选项分别在其函数参考页面中描述。 配置好 PHP 后,便可以开始编译模块和/或可执行文件。 make 命令用来做这一工作。如果该命令执行失败而找不到原因,请参考安装问题一节。 Unix 系统下的 Apache 1.3.x 本节包括在 Unix 平台的 Apache 下安装 PHP 的说明和提示。我们在另外的页面也有 Apache 2 的安装和说明。 可以从 核心配置选项列表以及位于手册对应部分的特定扩展配置选项中选择参数并在安装步骤第 10 步将它们添加到 configure 命令中。版本号在这里被省略了以保证此说明的正确性。需要将这里的“xxx”替换为自己使用的文件的正确值。 Example#1 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 重新加载)。
也可以将 PHP 作为静态对象来安装: Example#2 PHP 的 Apache 静态模块版本安装说明 1. gunzip -c apache_1.3.x.tar.gz | tar xf - 2. cd apache_1.3.x 3. ./configure 4. cd ..
5. gunzip -c php-5.x.y.tar.gz | tar xf - 6. cd php-5.x.y 7. ./configure --with-mysql --with-apache=../apache_1.3.x 8. make 9. make install
10. cd ../apache_1.3.x
11. ./configure --prefix=/www --activate-module=src/modules/php5/libphp5.a (上面一行是正确的!是的,我们知道 libphp5.a 尚不存在,还不到时候, 它会在之后被创建。)
12. make (现在应该有一个 httpd 二进制文件,可以将它复制到 Apache bin 目录。如果这是 第一次安装,还要“make install”。)
13. cd ../php-5.x.y 14. cp php.ini-dist /usr/local/lib/php.ini
15. 可以编辑 /usr/local/lib/php.ini 文件以设置 PHP 选项。编辑 httpd.conf 或 srm.conf 文件,添加: AddType application/x-httpd-php .php
Note: 对于 PHP 4,把 php-5 换成 php-4,把 php5 换成 php4。 根据 Unix 系统和 Apache 安装方法的不同,有很多方法停止和重启动 Apache。以下是一些不同的 Apache/UNIX 下重启动 Apache 的典型命令。需要把 /path/to/ 替换成自己系统上的确切路径。 Example#3 重启动 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 加载的 libphp5.so 共享库(PHP 4 是 libphp4.so)。而 PostgreSQL 支持将嵌入到此共享库中。 ./configure --with-apxs --with-pgsql=shared 此配置将生成 Apache 的 libphp5.so 共享库,并且还生成 pgsql.so 共享库,可以在 php.ini 文件中用 extension 指令加载,或者在 PHP 脚本中用 dl() 函数明确地加载。 ./configure --with-apache=/path/to/apache_source --with-pgsql 此配置将生成 libmodphp5.a 库, mod_php5.c 和一些相关的文件并且拷贝到 Apache 源程序目录中的src/modules/php5 目录下。然后用 --activate-module=src/modules/php5/libphp5.a 编译 Apache,Apache 编译系统会生成 libphp5.a 并且将其静态地连接到 httpd 程序中(在 PHP 4 中把 php5 替换成 php4)。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 支持页面。 Note: Apache 默认的 httpd.conf 文件中目前包括类似如下的内容: User nobody Group "#-1" 除非把它修改成“Group nogroup”或者其它类似的(“Group daemon”也很通用),PHP 将不能打开文件。 Note: 确认在使用 --with-apxs=/path/to/apxs 时指向 Apache 安装后的目录中的 apxs。绝对不能用 Apache 源程序中的 apxs 而要用安装后的 apxs。
Unix 系统下的 Apache 2.0 本节包括在 Unix 平台的 Apache 2.0 下安装 PHP 的说明和提示。 Warning 不推荐将线程化 MPM 用于实际运作的 Apache 2 环境中去。用 prefork MPM 替代,或者用 Apache 1。其原因见 FAQ 中的 使用线程化 MPM 的 Apache2。 推荐阅读 » Apache 文档,了解一下 Apache 2.0 服务器。 Note: PHP 和 Apache 2.0.x 兼容性注意事项 已知下列版本的 PHP 可以工作于最近版本的 Apache 2.0.x 之下: PHP 4.3.0 或更高版本,可从 » http://www.php.net/downloads.php 下载。 最新的稳定开发版。取得源代码 » http://snaps.php.net/php5-latest.tar.gz 或下载 Windows 可执行程序 » http://snaps.php.net/win32/php5-win32-latest.zip 。 预发布版,可从 » http://qa.php.net/ 下载。 总是可以通过 » 匿名 CVS 取得 PHP。 以上版本的 PHP 与 Apache 2.0.40 或更高版本兼容。 Apache 2.0 SAPI 支持自 PHP 4.2.0 起。PHP 4.2.3 可工作于 2.0.39,不要用任何其它版本的 Apache 与 PHP 4.2.3 配合。不过推荐的设置是用 PHP 4.3.0 或更高版本与最新版的 Apache2 配合使用。 所有提及的 PHP 版本仍然能工作于 Apache 1.3.x 之下。 下载最新版本的 » Apache 2.0,并且根据上文选择合适版本的 PHP 下载。本向导仅包含最基础的内容,只能让 Apache 2.0 和 PHP 能够正常工作。更多信息请阅读 » Apache 文档。这里省略所有的版本号,以保证本文的正确性。需要将本文的“NN”替换为相应的版本号。 Example#1 安装说明(Apache 2 共享模块版本) 1. gzip -d httpd-2_0_NN.tar.gz 2. tar xvf httpd-2_0_NN.tar 3. gunzip php-NN.tar.gz 4. tar -xvf php-NN.tar 5. cd httpd-2_0_NN 6. ./configure --enable-so 7. make 8. make install
现在已经将 Apache 2.0.NN 安装在 /usr/local/apache。本安装支持可装载模块 和标准的 MPM prefork。之后,可以使用如下命令启动 Apache 服务器: /usr/local/apache2/bin/apachectl start 如果成功,可以停止 Apache 服务器并继续安装 PHP: /usr/local/apache2/bin/apachectl stop.
9. cd ../php4-NN
10. 现在需要配置 PHP。在这里可以用各种各样的参数来自定义PHP,例如启动哪些 扩展功能包的支持等。用 ./configure --help 命令可以列出当前可用的所有参 数。在此例中,将给出一个在有 MySQL 支持的 Apache 2 上进行配置的范例。 用户本地的 apxs 的路径可能会不同,事实上,在用户的系统中,它可能被命名为 apxs2。
./configure --with-apxs2=/usr/local/apache2/bin/apxs
11. make 12. make install
如果决定在安装后改变配置选项,只需重复最后的三步,然后需要重新启动 Apache 使新模块生效。无需重新编译。
请注意,除非明确有提示,否则“make install”命令将安装 PEAR、各种 PHP 工具 诸如 phpize,安装 PHP CLI 等等。
13. 配置 php.ini
cp php.ini-dist /usr/local/lib/php.ini
可以编辑 php.ini 文件以修改 PHP 的选项。如果想要把此文件放到另外的位置, 需要在步骤 10 添加 --with-config-file-path=/path 选项。
如果选择 php.ini -recommended,请务必阅读其中的变更的列表,它们将影响 PHP 的执行。
14. 编辑 httpd.conf 文件以调用 PHP 模块。LoadModule 表达式右边的路径必须指向 系统中的 PHP。以上的 make install 命令可能已经完成了这些,但务必要检查。
对于 PHP 4: LoadModule php4_module modules/libphp4.so
对于 PHP 5: LoadModule php5_module modules/libphp5.so
15. 告知 Apache 将特定的扩展名解析成 PHP,例如,让 Apache 将扩展名 .php 解析成 PHP。可以将任何扩展名指定为 PHP,只需添加它们,每一个用空格分隔。 例如,要添加 .phtml:
AddType application/x-httpd-php .php .phtml
通常还将 .phps 扩展名设置成显示高亮的 PHP 源文件,可以这样来完成:
AddType application/x-httpd-php-source .phps
16. 启动 Apache 服务器: /usr/local/apache2/bin/apachectl start
按照上面的步骤便可以使 Apache 2.0 将 PHP 作为 SAPI 模块了。当然 Apache 和 PHP 都还有很多配置选项,可以在相应的源代码目录中使用 ./configure --help 获得更多信息。假如要编译一个多线程版本的 Apache 2.0,必须覆盖标准的 MPM-Module prefork,或者 worker 或者 perchild。要这样,需要在上面的第 6 步使用 --with-mpm=worker 或者 --with-mpm=perchild 选项。之前需要了解自己在做什么。更多信息请参考 Apache 文档中关于» MPM-Modules 的部分。 Note: 如果要使用内容协商(content negotiation)机制,请阅读 Apache MultiViews 常见问题。 Note: 要编译多线程版本的 Apache,系统必须支持多线程。这也意味着需要将 PHP 编译为正处在试验阶段的 Zend Thread Safety(ZTS),因此并不是所有的扩展都可以使用了。推荐编译 Apache 使用标准的 prefork MPM-Module。
Caudium 服务器 PHP 4 可以被编译为 » Caudium web 服务器的一个 Pike 模块。注意 PHP 3 中不支持。请参考下面的安装说明以将 PHP 4 安装到 Caudium 服务器中。 Example#1 Caudium 安装指南 1. 在安装 PHP 4 之前请确认已经正确安装了 Caudium 服务器。 要想使 PHP 4 正确的工作,还需要 Pike 7.0.268 或更高版本。 为了方便起见,我们假定 Caudium 安装在 /opt/caudium/server/ 中。 2. 进入目录 php-x.y.z (x.y.z 是 PHP 的版本号)。 3. ./configure --with-caudium=/opt/caudium/server 4. make 5. make install 6. 如果 Caudium 正在运行请重新启动它。 7. 登录图形配置界面,进入需要 PHP 4 支持的虚拟服务器。 8. 点击 Add Module 之后点击 locate,然后添加 PHP 4 脚本支持模块。 9. 如果出现“PHP 4 interpreter isn't available”的错误提示, 请重新启动 web 服务器。如果还是不行,请检查 /opt/caudium/logs/debug/default.1 中是否有与 PHP4.so 文件相关的错误。也要查看 caudium/server/lib/[pike-version]/PHP4.so 这个文件是否存在。 10. 如果需要,请配置 PHP 脚本支持模块。
当然可以将各种 PHP 4 的扩展模块编译到 Caudium 服务器中。请参考扩展库各自配置选项的说明。 Note: 当编译 PHP 4 的 MySQL 的支持时,必须确认使用了正常的 MySQL 客户端代码。否则如果 Pike 已经支持 MySQL,就会产生冲突。应该在编译的时候使用 --with-mysql 选项指定 MySQL 的安装目录。
fhttpd 服务器 要将 PHP 作为 fhttpd 的模块来编译,在提示“Build as an fhttpd module?”时,回答“yes”(用 --with-fhttpd= DIR来配置)并且指定 fhttpd 源代码的基本目录。默认的目录是 /usr/local/src/fhttpd。如果正在使用 fhttpd 服务器,将 PHP 编译成模块方式将提供更好的性能,更多的可控性以及远程执行能力。 Note: PHP 4.3.0 以后的版本已经不再提供对 fhttpd 的支持。
Sun Solaris 上的 Sun、iPlanet 和 Netscape 服务器 本节包含了在 Sun Solaris 平台的 Sun Java System web Server、Sun ONE web Server、iPlanet 和 Netscape 下安装 PHP 的说明和提示。 从 PHP 4.3.3 起,可以使用基于 NSAPI 模块 PHP 脚本来 生成自定义目录列表和错误页面。更多与 Apache 兼容的功能也可以使用。要了解如何在当前的 web 服务器中支持此功能,请阅读 关于子请求(subrequests)的注释。 可以在下面的链接中了解更多关于在 Netscape Enterprise Server(NES)中设置 PHP 的信息: » http://benoit.noss.free.fr/php/install-php4.html 。 要在 Sun JSWS/Sun ONE WS/iPlanet/Netscape web 服务器中编译 PHP,请为 --with-nsapi=[DIR] 输入合适的安装目录。默认的目录通常是 /opt/netscape/suitespot/。还可以阅读 /php-xxx-version/sapi/nsapi/nsapi-readme.txt。 1. 从 » http://www.sunfreeware.com/ 或其它下载站点安装下面的软件包: autoconf-2.13 automake-1.4 bison-1_25-sol26-sparc-local flex-2_5_4a-sol26-sparc-local gcc-2_95_2-sol26-sparc-local gzip-1.2.4-sol26-sparc-local m4-1_4-sol26-sparc-local make-3_76_1-sol26-sparc-local mysql-3.23.24-beta(如果想要 mysql 支持) perl-5_005_03-sol26-sparc-local tar-1.13 (GNU tar) 2. 请确认 PATH 变量包含适当的目录 PATH=.:/usr/local/bin:/usr/sbin:/usr/bin:/usr/ccs/bin,并使用 export PATH 命令将其导出为环境变量。 3. gunzip php-x.x.x.tar.gz (如果使用 .gz 版本,否则跳到 4) 4. tar xvf php-x.x.x.tar 5. 进入 PHP 解压缩后的目录: cd ../php-x.x.x 6. 在下面的步骤中,请确认 Netscape 服务器安装在 /opt/netscape/suitespot/ 目录中。否则,将下面命令中的该路径修改为正确的路径并运行: 7. ./configure --with-mysql=/usr/local/mysql 8. --with-nsapi=/opt/netscape/suitespot/ 9. --enable-libgcc 10. 运行 make,然后运行 make install。 在执行了基础的安装并阅读相应的 Readme 文件后,还需要执行一些额外的配置步骤。 Sun/iPlanet/Netscape 的配置说明 首先需要为 LD_LIBRARY_PATH 环境变量添加一些路径,以便服务器找到所需的共享库。可以使用 web 服务器的启动脚本很好的完成这一工作。启动脚本通常位于: /path/to/server/https-servername/start。或许需要编辑其配置文件,它位于: /path/to/server/https-servername/config/。 1. 添加下面一行到 mime.types(可以在管理服务器中添加): 2. type=magnus-internal/x-httpd-php exts=php 3. 4. 5. 编辑 magnus.conf( 若服务器 >= 6)或 obj.conf(若服务器 < 6)并添加下述内容。shlib 的值根据系统的配置会有所不同。它可能类似于 /opt/netscape/suitespot/bin/libphp4.so。应该在 mime types init 后添加如下两行内容: 6. Init fn="load-modules" funcs="php4_init,php4_execute,php4_auth_trans" shlib="/opt/netscape/suitespot/bin/libphp4.so" 7. Init fn="php4_init" LateInit="yes" errorString="Failed to initialize PHP!" [php_ini="/path/to/php.ini"] (PHP >= 4.3.3) php_ini 参数是可选的。但是若使用它,便可以将 php.ini 放到 web 服务器的配置目录中去。 8. 在 obj.conf 中配置默认对象(对于虚拟服务器的类 [版本 6.0+] 是在 vserver.obj.conf 中): 9. 10. . 11. . 12. . 13. .#注意下面一行添加在所有“ObjectType”之后,所有“AddLog”之前 14. Service fn="php4_execute" type="magnus-internal/x-httpd-php" [inikey=value inikey=value ...] 15. . 16. . 17. (PHP >= 4.3.3)作为附加的参数,可以在 php.ini 中添加一些特别的配置选项。例如可以设置docroot="/path/to/docroot" 指向 php4_execute 被调用的上下文(context)。对于布尔 ini 键值,请使用 0/1 作为其值,而不是 "On"、"Off" 等(它们是无效的),例如,使用 zlib.output_compression=1,而不应使用zlib.output_compression="On"。 18. 本步骤仅在需要配置一个由 PHP 脚本组成的目录时由必要执行(类似于一个 cgi-bin 目录): 19. 20. ObjectType fn="force-type" type="magnus-internal/x-httpd-php" 21. Service fn=php4_execute [inikey=value inikey=value ...] 22. 之后,可以在管理服务器中配置一个目录,分配给它 x-httpd-php 风格(style)。这样在该目录中的所有文件都会被当作 PHP 来执行。这样就能很方便的将 PHP 文件更名为 .html 以隐藏 PHP。 23. 认证的设置:PHP 认证不能与其它任何类型的认证一起工作。所有认证被传递到 PHP 脚本。要为整个服务器配置 PHP 认证,在默认对象中添加下面一行: 24. 25. AuthTrans fn=php4_auth_trans 26. . 27. . 28. . 29. 30. 要在单一目录使用 PHP 认证,添加如下内容: 31. 32. AuthTrans fn=php4_auth_trans 33. Note: PHP 使用的堆栈大小取决于 web 服务器的配置。如果运行很大的 PHP 脚本时程序崩溃,推荐在 Admin Server(在“MAGNUS EDITOR”一节)中增大此项。 CGI 环境和对 php.ini 推荐的修改 当编写 PHP 脚本时,应特别注意 Sun JSWS/Sun ONE WS/iPlanet/Netscape 是一个多线程 web 服务器。因此,所有请求都运行在相同的进程空间(Web 服务器自己的空间),该空间仅有一套环境变量。如果想获得 CGI 变量,例如 PATH_INFO、 HTTP_HOST 等,使用原有的 PHP 3.x 的方式( getenv()),或使用类似的方式(注册全局变量到环境变量, $_ENV),都是不可行的。只能获得运行中的 web 服务器的环境变量,而不能获得任何有效的 CGI 变量! Note: 为什么在环境中存在(无效的)CGI 变量? 答:这是因为从管理服务器中启动 web 服务器进程时,运行了 web 服务器的启动脚本,它事实上是一个 CGI 脚本(管理服务器中的一个 CGI 脚本!)。这便是为什么启动的 web 服务器包含一些 CGI 变量。可以尝试不从管理服务器启动 web 服务器,用 root 用户登录使用命令行手动启动它,会发现这些 CGI 形式的变量不复存在。 要在 PHP 4.x 中正确获得 CGI 变量,仅需修改脚本使用超级全局变量 $_SERVER。如果老脚本中使用了$HTTP_HOST 等变量,应该在 php.ini 中打开 register_globals,并且要修改变量顺序(注意:从中删除 "E",因为不需要这里的环境变量): variables_order = "GPCS" register_globals = On 错误页面及自造目录列表的特别使用 (PHP >= 4.3.3) 可以使用 PHP 为 "404 Not Found" 或类似的错误代码生成错误页面。将下面几行添加到 obj.conf 中以覆盖默认的错误页面: Error fn="php4_execute" code=XXX script="/path/to/script.php" [inikey=value inikey=value...] XXX 是 HTTP 错误代码。请删除任何可能干扰 Error 设置的指令。如果想为所有可能存在的错误提供一个页面,则将code 参数删除。脚本可以通过 $_SERVER['ERROR_TYPE'] 获得 HTTP 状态代码。 另一种可能是生成自造目录列表。只要创建一个 PHP 脚本,来显示目录列表 并在 obj.conf 中为 type="magnus-internal/directory" 将相应的默认 Service 行替换为: Service fn="php4_execute" type="magnus-internal/directory" script="/path/to/script.php" [inikey=value inikey=value...] 错误和目录列表页面中,原始的 URI 和翻译的 URI 均被分别储存在 $_SERVER['PATH_INFO'] 和$_SERVER['PATH_TRANSLATED'] 变量中。 关于 nsapi_virtual() 和子请求的注意事项(PHP >= 4.3.3) NSAPI 模块现在支持 nsapi_virtual() 函数(别名: virtual()),用来在 web 服务器上创建子请求(subrequests)和在 web 页面插入请求的结果。此函数使用了一些 NSAPI 中还没有文档说明的函数。在 Unix 下,该模块自动查找需要的函数,若它们存在则使用它们。若不存在,函数 nsapi_virtual() 被禁用。 Note: 但是要注意,对 nsapi_virtual() 的支持是试验性质的!
CGI 和命令行设置 默认为将 PHP 编译为 CGI 程序。这将建立一个命令行解释器,可用于 CGI 处理或非 web 相关的 PHP 脚本。如果用户运行着一个 PHP 模块支持的 web 服务器,那通常为性能考虑应该使用模块方式。不过,CGI 版可以使 Apache 用户用不同的用户 ID 运行不同的 PHP 页面。 Warning 如果使用 CGI 方式安装,则服务器对于某些可能的攻击是开放的。请阅读 CGI 安全一章以学习如何防御这些攻击。 自 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 会忽略配置文件。 Note: make bench 仅能用于 PHP 3。 使用变量 某些 服务器提供的环境变量没有定义在当前的 » CGI/1.1 标准中。只有下列变量定义在其中: 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。其它的变量均作为“供应商扩展(vendor extensions)”来对待。
在 HP-UX 系统下的安装 本章节的内容和提示仅限于将 PHP 安装到 HP-UX 系统上(此文章是由 paul_mckay at clearwater-it dot co dot uk 编写的)。 Note: 本文涉及的技巧适用于 PHP 4.0.4 和 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. 下载后对他们分别执行 gunzip 和 tar -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 行,由原来的 12. User nobody 13. Group nogroup 14. 替换为类似如下的内容 User www Group sys 这是因为在 hp-ux 系统下, Apache 不能作为 nobody 用户运行。按照上面的方式配置 Apache 和 PHP 就应该可以正常工作了。
在 OpenBSD 系统下的安装 本章节的内容和提示仅限于将 PHP 安装到 » OpenBSD 3.6 系统上。 使用二进制包安装 使用二进制包安装 PHP 到 OpenBSD 系统上是被推荐的同时也是最简单的方法。PHP 核心包已经从其他模块中分离出来了并且每个模块可以被独立的安装/卸载而不影响其他模块。所有这些安装 PHP 需要的文件可以在 OpenBSD 光盘或者在 FTP 站点上找到。 需要安装的 PHP 核心包的文件是 php4-core-4.3.8.tgz,它包含了基本的引擎(包括 gettext 和 iconv)。其次,可能还需要安装一些模块包,如: php4-mysql-4.3.8.tgz 或 php4-imap-4.3.8.tgz。需要使用命令 phpxs 去激活它,并且再通过修改 php.ini 文件来屏蔽他们。 Example#1 在 OpenBSD 系统下的软件包的安装示例 # pkg_add php4-core-4.3.8.tgz # /usr/local/sbin/phpxs -s # cp /usr/local/share/doc/php4/php.ini-recommended /var/www/conf/php.ini (加入 mysql 包) # pkg_add php4-mysql-4.3.8.tgz # /usr/local/sbin/phpxs -a mysql (加入 imap 包) # pkg_add php4-imap-4.3.8.tgz # /usr/local/sbin/phpxs -a imap (测试一下删除 mysql 包) # pkg_delete php4-mysql-4.3.8 # /usr/local/sbin/phpxs -r mysql (安装 PEAR 库) # pkg_add php4-pear-4.3.8.tgz 阅读用户手册中的 » packages(7) 部分,可以得到更多 OpenBSD 系统下有关二进制软件包的信息. 使用软件包 同样可以使用 » 软件包目录(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.6 包需要预先安装 XFree86。如果不想使用那些需要 X11 的字体特性,则安装php4-gd-4.3.8-no_x11.tgz 包来替代之。 早期发布版本 早期的 OpenBSD 系统使用 FLAVORS 系统把 PHP 连接为静态模式。自从使用这种方法编译就造成了问题:很难制作二进制软件包。仍然可以使用早期稳定的 ports trees,但这种方式已经不被 OpenBSD 小组所支持。如果对此有任何建议和意见,软件包当前的维护人是 Anil Madhavapeddy(avsm at openbsd dot org)。
在 Solaris 下的安装 本节包含了在 Solaris 系统上安装 PHP 的说明和提示。 需要的软件 默认安装的 Solaris 系统经常缺少 C 语言编译器和其相关工具。部分工具必须使用该工具的 GNU 版本,原因请阅读FAQ。下面是需要的软件: gcc(推荐使用,其它 C 语言编译器也可以工作) make flex bison m4 autoconf automake perl gzip tar GNU sed 此外,还需要安装(或编译)在配置时定义的所有额外软件,比如说 Oracle 或 MySQL。 使用软件包 可以使用 pkgadd 来安装大部分需要的软件来简化 Solaris 安装过程。
Debian GNU/Linux 安装说明 本节包含了在 » Debian GNU/Linux 下安装 PHP 的说明和提示。 使用 APT 当然可以下载 PHP 源代码并自己编译,不过使用 Debian 的软件包系统是安装 PHP 的最简单和最干净利落的方法。如果不熟悉在 Linux 下编译软件,那最好用此方法。 首先要决定是安装 Apache 1.3.x 还是 Apache 2.x。相对应的 PHP 软件包名字为 libapache-mod-php* 和 libapache2-mod-php*。以下步骤以 Apache 1.3.x 为例。注意迄今为止,还没有 PHP 5 的正式的 Debian 软件包。以下步骤将安装 PHP 4。 PHP 在 Debian 下也有 CGI 和 CLI 两种风格,分别命名为 php4-cgi 和 php4-cli。如果需要的话,只要用正确的软件包名称重复以下步骤。另外需要安装的一个特殊软件包是 php4-pear。它包含了最小的 PEAR 安装以及 pear 命令行工具。 如果需要比 Debian 的稳定版本更新的 PHP 包或者一些不在 Debian 官方库中的 PHP 模块,那应该看看 » http://www.apt-get.org/ 。其中可以找到一个 » Dotdeb。此非官方库是由 » Guillaume Plessis 负责维护,其中包含了最新版 PHP 4 和 PHP 5 的 Debian 软件包。要使用,只需将以下两行添加到 /etc/apt/sources.lists 并运行 apt-get update: Example#1 Dotdeb 有关的两行 deb http://packages.dotdeb.org stable all deb-src http://packages.dotdeb.org stable all 最后要考虑的是自己的软件包列表是否是最新版。如果最近没有更新过,那需要在做任何事之前先 apt-get update。这样就可以使用最近稳定版的 Apache 和 PHP 软件包了。 所有准备做好之后,就可以按照下面的例子来安装 Apache 和 PHP: Example#2 Debian 中在 Apache 1.3 下安装的例子 # apt-get install libapache-mod-php4 APT 将自动安装 Apache 1.3 的 PHP 4 模块以及所有依赖的库并激活之。如果在安装过程中没有被要求重启动 Apache,那必须手工进行: Example#3 安装完 PHP 4 后停止并启动 Apache # /etc/init.d/apache stop # /etc/init.d/apache start 更好地控制配置 上一节中 PHP 仅安装了核心模块。但可能不够用,用户很快就会发现需要更多的激活模块,例如 MySQL,cURL,GD 等。 当自己从源代码编译 PHP 时,需要通过 configure 命令来激活模块。用 APT 则只需安装附加的软件包。这些包都命名为“php4-*”(或“php5-*”,如果安装了第三方的 PHP 5 的话)。 Example#4 取得 PHP 附加软件包的列表 # dpkg -l 'php4-*' 从上面的输出中可以看到,还有很多 PHP 模块可安装(除了 php4-cgi,php4-cli 或 php4-pear 这些特殊软件包)。仔细察看并安装自己所需要的。如果选择了一个模块而没有相应的库,APT 会自动安装所有依赖的库。 如果选择将 MySQL,cURL 和 GD 支持添加到 PHP 中,则其命令类似于: Example#5 安装 PHP 的 MySQL,cURL 和 GD 支持 # apt-get install php4-mysql php4-curl php4-gd APT 会自动把适当的行添加到不同的 php.ini( /etc/php4/apache/php.ini, /etc/php4/cgi/php.ini 等)中去。 Example#6 在 PHP 中激活 MySQL,cURL 和 GD 的配置行 extension=mysql.so extension=curl.so extension=gd.so 只需像之前那样重新启动 Apache 来激活这些模块。 常见问题 如果看到了 PHP 源代码而不是脚本应该产生的结果,则 APT 可能没有 /etc/apache/conf.d/php4 包括到 Apache 1.3 配置中去。请确保下面一行出现在 /etc/apache/httpd.conf 文件中并重启动 Apache: Example#7 下面这行在 Apache 中激活了 PHP 4 # Include /etc/apache/conf.d/ 如果安装了更多模块但其函数不能在脚本中使用,请确保相应的配置行出现在 php.ini 中,如上面所说。APT 可能会由于混乱的 debconf 配置而在安装附加模块时失败。
以上内容由 宝鸡网站建设公司 、 宝鸡网络公司 --- 宝鸡世纪网络公司 为您转摘!我公司是宝鸡地区专业的网站建设服务提供商,五年建站历程、六百家客户的选择,值得信赖!咨询热线0917-3535180 3536690