Unix 系统下的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 后,便可以开始编译模块和/或可执行文件。make 命令用来做这一工作。

Unix 系统下的 Apache 1.3.x

本节包括在 Unix 平台的 Apache 下安装 PHP 的说明和提示。

可以从核心配置选项列表以及位于手册对应部分的特定扩展配置选项中选择参数并在安装步骤第 10 步将它们添加到 configure 命令中。版本号在这里被省略了以保证此说明的正确性。需要将这里的“xxx”替换为自己使用的文件的正确值。

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 的 Apache 静态模块版本安装说明

也可以将 PHP 作为静态对象来安装:

  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-4.x.y.tar.gz | tar xf -
  6. cd php-4.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/php4/libphp4.a
    (上面一行是正确的!是的,我们知道 libphp4.a 在目前不存在。它是不应该存在的,它将被创建。)
  12. make \\(现在应该有一个 httpd 二进制文件,可以将它复制到 Apache bin 目录。如果这是第一次安装,还要“make install”。)
  13. cd ../php-4.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

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

重启动 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。

Unix 系统下的 Apache 2.0

本节包括在 Unix 平台的 Apache 2.0 下安装 PHP 的说明和提示。

不推荐将线程化 MPM 用于实际运作的 Apache 2 环境中去。用 prefork MPM 替代,或者用 Apache 1。其原因见 FAQ 中的使用线程化 MPM 的 Apache2。

推荐阅读 Apache 文档,了解一下 Apache 2.0 服务器。

PHP 和 Apache 2.0.x 兼容性注意事项: 已知下列版本的 PHP 可以工作于最近版本的 Apache 2.0.x 之下:

⇑以上版本的 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”替换为相应的版本号。

安装说明(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 模块。LoadMolude 表达式右边的路径必须指向系统中的 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 的部分。

注: 如果要使用内容协商(content negotiation)机制,请阅读 Apache MultiViews 常见问题

注: 要编译多线程版本的 Apache,系统必须支持多线程。这也意味着需要将 PHP 编译为正处在试验阶段的 Zend Thread Safety(ZTS),因此并不是所有的扩展都可以使用了。推荐编译 Apache 使用标准的 prefork MPM-Module。

CGI 和命令行设置

默认为将 PHP 编译为 CGI 程序。这将建立一个命令行解释器,可用于 CGI 处理或非 web 相关的 PHP 脚本。如果用户运行着一个 PHP 模块支持的 web 服务器,那通常为性能考虑应该使用模块方式。不过,CGI 版可以使 Apache 用户用不同的用户 ID 运行不同的 PHP 页面。

如果使用 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 会忽略配置文件

注: 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 编写的)。

注: 本文涉及的技巧适用于 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 行,由原来的
  User nobody
  Group nogroup

替换为类似如下的内容

  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 文件来屏蔽他们。

在 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早期版本

早期的 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 安装过程。

©2011 LOVEAN.COM 浏览前必读 | 网站地图 | 联系我们