PHP.INI配置文件漫游

网络整理 - 07-25

一般来说你不需要改变PHP设置,它根据默认的配置通常就能很好的工作。但作为PHP设计者的开发人员们考虑到用户可能偶尔需要针对特定应用程序对PHP语言的一些功能进行调整。因此,他们将一些PHP变量通过名为php.ini的配置文件显示出来。此配置文件允许用户调整PHP多项功能,包括设置文件路径以及目录、改变会话以及数据库参数,以及激活扩展选项(activating extensions)等。

PHP配置文件

在开始我们的介绍之前,我们将对PHP配置文件的组织方式进行简要的说明。文件命名为php.ini的原因之一就是它遵循许多Windows应用程序中INI文件的常见结构。它是一个ASCII文本文件,并且被分成几个不同名称的部分,每一部分包括与之相关的各种变量。每一部分类似于如下结构:

[MySection]

variable="value"

anothervariable="anothervalue"

各部分的名称通过方括号括起来放在顶部,然后将是一对对任意数量的“变量名——值”,每一对占单独一行。同常规的PHP代码要求一样,变量名区分大小写且不能包含空格,变量的值可以是数字、字符串,或者布朗型(Boolean)。

每一行如果以分号开头则表明该行是注释语句。这也使得允许或禁止PHP功能变得非常简单。你只需要将相关语句注释而无需删除,该语句就不会被系统解析。特别是当你希望在一段时间以后重新打开某种功能的时候特别方便,因为你不需要在配置文件中将此行删除。

为了便于PHP识别,php.ini文件必须要么放在当前目录,要么放在$PHPRC环境变量所定义的目录中,或者是在编译时所指定的目录(对Windows PHP来说即Windows主目录)。

在通过修改php.ini文件改变PHP配置之后,需要重启Web服务器以使配置改变生效(当然这是在通过Web服务器使用PHP的情况下)。对于PHP命令行使用模式,每次只要涉及到PHP二进制程序的时候系统都会读取配置文件。

设置解析选项

这是配置文件漫游的第一站也是非常重要的一站:语言解释程序相关选项。第一行是引擎变量,它将控制PHP引擎是“on”还是“off”。关闭引擎则意味着嵌入的PHP代码将不会被Web服务器所解析。通常将其关闭是毫无意义的,所以保持开启状态。

engine = On

short_open_tag则控制解析器是否识别简写的<?...?>标志,即将其等价为标准<?php...?>标志。如果预计简写标志会和别的语言产生冲突,或者希望对PHP代码采用严格的语法规则,那么可以将其关闭。

short_open_tag = On

通常而言,在PHP脚本中的会话、cookie或者HTTP文件头数据必须在脚本产生任何输出之前发送出去。如果在你的应用程序中不可能实现,你可以通过允许PHP称之为output buffering功能来达到这一目的,此功能通过output_buffering变量进行控制。

如果打开output buffering,PHP将把脚本产生的运行结果存放在特殊的内存缓冲区域内,并在得到明确指示时才将其发送出去。通过这样的方式,你甚至可以在脚本中部或者脚本尾部发送特殊的HTTP文件头以及cookie数据。当然,这样会造成脚本运行性能一定程度的下降。

output_buffering = Off

你还可以为output_buffering变量赋值以指定缓冲区域大小,例如:

output_buffering = 2048

当PHP启动的时候,它将在Web服务器标准头信息中添加PHP版本号信息。如果希望关闭此功能,可以将expose_php设置为false。这项功能非常有用,例如,可以在Web服务器上屏蔽此信息以防范潜在的黑客攻击。

expose_php = On

现在来看看如何设置查找路径以及差错控制。

设置PHP查找路径

可以通过include_path变量设置PHP查找路径。它允许包括一系列目录。在相关文件调用缺少指定路径的情况下,PHP将自动检查这些目录。

如果有频繁使用的函数库或类,也可以将其位置写在这里以方便查找。这也是一个很好的添加PHP的PEAR目录路径的地方,此路径将包括很多可重用的类。

include_path = ".:/usr/local/lib/php/pear:"

Windows用户可以通过分号分割路径名来指定多路径;UNIX用户则需要使用冒号。

另外两个有趣的变量是auto_prepend_file以及auto_append_file。这些变量指定PHP自动添加到任何PHP文档文件头或文件尾的其他文件。这对于为PHP产生的页面添加页眉或页脚非常有用,可以节省为每个PHP文档添加代码的时间。但需要注意这里的指定文件将会添加到所有的PHP文档中,所以这些变量必须适合单应用程序(single-application)的服务器。

所包含的文件要么是PHP脚本,要么是普通的HTML文档。嵌入式PHP代码必须用标准<?php...?>标记括起来。

auto_prepend_file = /home/web/includes/header.php

auto_append_file = /home/web/includes/legal.php

差错处理

PHP的差错可以分为四类:解析错误、关于代码小问题的提示(notice)(例如变量未初始化)、警告(除了非致命错误),以及致命错误(fatal errors)。通常而言,当PHP遇到除第二种(关于代码小问题的提示)以外的错误时,将显示错误信息,并且如果属于致命错误则会立即停止代码处理。你可以通过修改error_reporting变量来对此功能进行修改。此变量可以接收一比特位的错误代码,且只显示同这些代码相同的错误。

error_reporting = E_ALL

要关闭显示所有错误——在产品代码中通常建议这么做——可以将display_errors变量设置为false,并使用log_errors变量将信息写入错误日志(error log)。

此举可以提高系统的安全性能——通过关闭错误显示,你可以将系统的特定信息隐藏起来,恶意用户就无法利用这些信息试图入侵站点或应用程序。但你应当通过将error_log变量指定为文件名或特殊值“syslog”,从而将这些错误信息写入到自定义日志文件或者系统日志中。请记住定期检查这些文件,以知道在应用程序内部到底发生了什么。

display_errors = Off

log_errors = On

error_log = "error.log"