首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

2.2 配置

如果已经走到了这里,那么恭喜你!现在你已经有了一个可以使用的Apache和PHP服务器了。不过,可能还需要完成另外几项运行时修改,这样才能让软件如你所愿正常运转。大多数修改都通过Apache的httpd.conf文件和PHP的php.ini文件完成。两个文件包含了大量配置指令,Apache和PHP的行为就分别由其相应文件中的配置指令共同控制。本章后面将重点讨论PHP中最常用的配置指令,介绍这些指令的作用、作用域和默认值。

2.2.1 管理PHP的配置指令

在学习每个指令的细节之前,本节将演示处理这些指令的各种方法,可以通过php.ini文件、httpd.conf和.htaccess文件完成,也可以直接通过PHP脚本进行处理。

1. php.ini文件

PHP有两个配置模板:php.ini-dist和php.ini-recommended。2.1节建议使用后者,因为其中的许多参数都已经设置为推荐值。如果采纳这个建议,在保证安装安全以及调整安装时,就能节省大量的时间和精力,因为这个文件中有大约240个不同的配置参数。虽然默认值有助于快速地部署PHP,但你可能还想对PHP的行为做另外的调整,因此有必要对这个文件有所了解,学习其中的许多配置参数。下面的2.2.2节将详细介绍这些参数,解释其作用、作用域和取值。

与Apache的httpd.conf文件或MySQL的my.cnf(Windows下是my.ini)类似,php.ini文件是PHP的全局配置文件。这个文件处理了PHP在12个不同方面的行为:

  ● 语言选项;

  ● 安全模式;

  ● 语法突出显示;

  ● 杂项;

  ● 资源限制;

  ● 错误处理和日志;

  ● 数据处理;

  ● 路径和目录;

  ● 文件上传;

  ● Fopen包装器;

  ● 动态扩展;

  ● 模块设置。

在2.2.2节中,我们将讨论以上所列的每一项,并介绍各项的参数。但是,在此之前,先花一点时间来回顾php.ini文件的一般语法。php.ini文件是一个纯文本文件,只包含注释和“参数=值”赋值对。下面是php.ini文件中的一个示例片段:

以分号开头的行是注释,这里safe_mode参数的值赋为Off。

提示   如果很清楚某个配置参数的作用,可以考虑将其注释删除,使文件的内容简化,从而减少以后的编辑时间。

修改将何时生效,这取决于你安装PHP的方式。如果作为CGI二进制包安装PHP,那么每次调用PHP时都会重新读取php.ini文件,因此修改将立即生效。如果作为Apache模块安装PHP,则只会在Apache守护进程第一次启动时读取php.ini。因此,如果以后一种方式安装PHP,就必须重启Apache,这样修改才会生效。

2. Apache的httpd.conf.htaccess文件

当PHP作为Apache模块运行时,就可以通过httpd.conf或.htaccess文件修改许多指令。为此,可以在“名=值”对前面加上以下某个关键字作为前缀:

  ● php_value:设置指定指令的值。

  ● php_flag:设置指定布尔指令的值。

  ● php_admin_value:设置指定指令的值。它与php_value不同,不能用在.htaccess文件中,也不能在虚拟主机或.htaccess中被覆盖。

  ● php_admin_flag:设置指定布尔指令的值。它与php_flag不同,不能用在.htaccess文件中,也不能在虚拟主机或.htaccess中被覆盖。

3. 在执行脚本中

第三种处理PHP配置变量的方式是通过ini_set( )方法来完成,这也是最本地化(localized)的方式。例如,假设要修改PHP中给定脚本的最大执行时间,只需在脚本最上面加入如下命令:

4. 配置指令作用域

任何地方都能修改配置指令吗?这个问题很好。答案是否定的,原因有很多,大多与安全有关。每个指令都有自己的作用域,指令只能在其作用域中修改。总共有4个作用域:

  ● PHP_INI_PERDIR:指令可以在php.ini、httpd.conf或.htaccess文件中修改。

  ● PHP_INI_SYSTEM:指令可以在php.ini和httpd.conf文件中修改。

  ● PHP_INI_USER:指令可以在用户脚本中修改。

  ● PHP_INI_ALL:指令可以在任何地方修改。

2.2.2 PHP的配置指令

以下各小节将介绍PHP的一些核心配置指令。除了一般定义外,每节还提供了配置指令的作用域和默认值。因为你大部分时间都会处理php.ini中的这些变量,所以我们将以这些指令在php.ini文件中出现的顺序来介绍。

注意,本节中介绍的指令大多只与PHP的一般行为有关;还有些指令与扩展包有关,或者与其他值得关注的问题(将在本书后面介绍)有关,这些指令不会在这一节讨论,而会在适当的章节中出现。例如,MySQL的配置指令将在第25章介绍。

1. 语言选项

第一部分指令用于确定语言最基本的一些行为。你肯定想花些时间来熟悉这些配置有哪些选择。

l   engine (On, Off)

作用域:PHP_INI_ALL;默认值:On。

这个参数只是负责确定PHP引擎是否可用。如果关闭,就根本不能使用PHP。显然,如果你计划使用PHP,就应当启用这个设置(保持为On)。

l   zend.ze1_compatibility_mode (On, Off)

作用域:PHP_INI_ALL;默认值:Off。

出版本书时,PHP 5.0已经发行了18个月,尽管如此,PHP 4.X仍在广泛地使用着。这个升级周期之所以拖延,可以归结于PHP 4和PHP 5之间的一些不兼容性。但是,许多开发人员可能不知道,只需启用zend.ze1_compatibility_mode指令,就可以在PHP 5中顺利地运行PHP 4应用程序,而没有任何问题。因此,要在PHP 5驱动的服务器上使用特定于PHP 4的应用程序,就可以用这个指令。

l   short_open_tag (On, Off)

作用域:PHP_INI_ALL;默认值:On。

PHP脚本部分要包围在转义语法中。有4种不同的转义格式,最短的一种就是短开放标记,如下:

你会发现,它与XML的语法相同,有些情况下这会出现问题。因此,提供了一种禁用这种格式的方法。启用short_open_tag(On)时,允许使用短标记;如果禁用short_open_tag(Off),就不允许使用短标记。

l   asp_tags (On, Off)

作用域:PHP_INI_ALL;默认值:Off。

PHP支持ASP风格的脚本定界符,如下:

如果你有使用ASP的背景,并且希望继续使用这种定界符语法,就可以启用这个标记。

l   precision (integer)

作用域:PHP_INI_ALL;默认值:12。

PHP支持很多数据类型,其中也包括浮点数。precision参数指定在浮点数中显示的有效数字个数。注意这个值在Win32系统中设置为14位,在UNIX下设置为12位。

l   y2k_compliance (On, Off)

作用域:PHP_INI_ALL;默认值:Off。

谁会忘记几年前Y2K带来的恐慌呢?为了消除非Y2K兼容(non–Y2K-compliant)软件所带来的问题,耗费的精力实在太大了。虽然可能性不太,但确实还有人在使用过时的不兼容浏览器。如果出于一些特殊的原因,你确定有些网站用户的确如此,则要禁用y2k_compliance参数;否则就应启用这个参数。

l   output_buffering ((On, Off) 或 output_buffering (integer))

作用域:PHP_INI_SYSTEM;默认值:Off。

有一定PHP经验的人(即使经验很少)可能都非常熟悉下面两个消息:

HTTP首部已经发回给请求用户后,如果脚本还试图修改HTTP首部,此时就会出现这些消息。最常见的情况是,已经向浏览器发回了一些输出,之后程序员又试图向用户发送一个cookie。这是不可能实现的,因为HTTP首部(对用户不可见,但浏览器要使用)总是在这些输出的前面。对于这个讨厌的问题,PHP 4.0提供了一个解决办法,引入了输出缓冲(output buffering)的概念。启用输出缓冲时,输出缓冲会告诉PHP在脚本完成后一次发送所有输出。这样,对HTTP首部的任何后续改变都可以通过脚本进行,因为HTTP首部还没有发送出去。启用output_buffering指令将打开输出缓冲。或者还可以设置缓冲区所能包含的最大字节数,来限制输出缓冲区的大小(从而隐含地启用输出缓冲)。

如果不希望使用输出缓冲,就应当禁用这个指令,因为它会使性能稍稍下降。当然,对于HTTP首部问题,最简单的解决方法是尽可能在传送其他内容之前,先传送首部信息。

l   output_handler (string)

作用域:PHP_INI_ALL;默认值:Null。

这个有趣的指令告诉PHP,在把输出返回给请求用户之前,将所有输出传递给一个函数。例如,假设你希望在输出返回给浏览器之前先压缩所有输出,就可以设置这个参数。所有兼容HTTP/1.1的主流浏览器都支持这个特性。可以如下为output_handler赋值:

ob_gzhandler()是PHP的压缩处理函数,位于PHP的输出控制库中。要记住,要将output_ handler设置为ob_gzhandler(),同时启用zlib.output_compression(在下面讨论),这是不允许的。

l   zlib.output_compression ((On, Off)) 或 zlib.output_compression ((integer))

作用域:PHP_INI_SYSTEM;默认值:Off。

在输出返回给浏览器之前先压缩,可以节省带宽和时间。现在大多数浏览器都支持这个HTTP/1.1特性,在大多数应用程序中都能安全地使用。将zlib.output_compression设置为On就可以启用自动的输出压缩。此外,通过为zlib.output_compression赋一个整数值,可以同时启用输出压缩,并设置压缩缓冲区大小(以字节为单位)。

l   zlib.output_handler (string)

作用域:PHP_INI_SYSTEM;默认值:Null。

如果zlib库不可用,zlib.output_handler将指定特定的压缩库。

l   implicit_flush (On, Off)

作用域:PHP_INI_SYSTEM;默认值:Off。

启用implicit_flush时,每次调用print()或echo()之后,以及每个嵌入的HTML块完成后,将自动清除或刷新其内容的输出缓冲区。当服务器需要非常长的时间来编译结果或完成某个计算时,这可能很有用。在这些情况下,可以利用这个特性向用户输出状态的更新,而不是等待服务器完成整个过程后才输出。

l   unserialize_callback_func (string)

作用域:PHP_INI_ALL;默认值:Null。

利用这条指令,在请求实例化一个未定义的类时,能控制逆串行化器(unserializer)的响应。对于大多数用户来说,这个指令无关紧要,因为如果PHP的错误报告设置为适当的级别,PHP就会对这些情况输出一个警告。

l   serialize_precision (integer)

作用域:PHP_INI_ALL;默认值:100。

serialize_precision指令确定在串行化双精度和单精度浮点数时小数点后存储的位数。把这个参数设置为适当的值可以确保当这些数字逆串行化时,不会丢失精度。

l   allow_call_time_pass_reference (On, Off)

作用域:PHP_INI_SYSTEM;默认值:On。

函数通过可以按两种方式传递:传值和传引用。可以在函数定义中指定每个参数在函数调用时如何传递给函数,这是推荐的方式。不过,也可以启用allow_call_time_pass_reference,强制所有参数在函数调用时都按引用传递。

第4章将讨论PHP函数,其中将介绍函数参数如何按值和按引用传递,并说明按值和按引用传递参数的影响。

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论