### 透析 PHP 的配置文件 php.ini

今天，我们来侃侃 PHP.INI 文件中的一些有趣的内容吧。

PHP.INI 文件相信每位 PHP 爱好者都不会陌生，在 PHP 的上一个版本 PHP3.0 中它被命名为 PHP3.INI。用 NOTEPAD 打开它，文件通常在操作系统的 Windows 目录下。大家都看到，PHP.INI 文件里面有很多分号“”，和 Windows 系统一样，这些分号用来表示注解，也就是说为了配置文件清晰易懂，开发者在分号后面对每个配置功能做了简短说明，系统处理时会忽略这些注解行。当然，另外一个好处是，当 PHP 系统配置有变化的时候，我们可以对某些行加上或去掉注解就行了，简单又方便。

auto_prepend_file string 可以指定一个文件自动地在读取所有 php 文件之前解析执行，可以为 PHP、ASP、HTML 等任何文件（不过图像文件可不行），在特殊时候倒是很有用。比如你想在每个 PHP 页面上增加一段广告，又假设你在开发一个网站，想让所有访问者在读取任何 PHP 页面之前进行身份验证，你就可以把你的验证代码作成单独文件，然后在这里设置 string 为该文件名就行啦。细心的读者要问了：如果我只是某些文件需要这些功能，可怎么办呀，开动脑筋吧，举个例子：

myprefix.php 文件

<?php

if (strstr(strtoupper( PHP_SELF),"/PHPTEST/"))

echo "我的广告！<BR>";

?>

这样只要设置：auto_prepend_file=“myprefix.php”，那么所有 phptest 目录下的 PHP 文件就都包含你的广告头啦！还需要说明的是这个文件应该放在 include_path 所指的路径里面，不然可能会出错的，下面就会提到它。

auto_append_file string 和上面功能类似，只是自动加在 PHP 文件末尾，而且 PHP 程序用 exit()退出时就不管用了。有了这个功能，我们可以易如反掌地添加公司地址的脚注了！

include_path string 这个参数的作用是让 include()、require()等函数在这里所定义的路径中查找文件，是不是有点象 DOS 时代里用的 SET PATH 命令？这个参数可以提供一个路径列表，不过在 UNIX 中路径间用冒号分隔，在 NT 中用分号，而且斜杠的方向也不相同。如：

UNIX 例：include_path=.:/home/lib

NT 例：include_path=".:c:homeib" 其中“.”表示当前目录。

gpc_order string

GPC 是 GET/POST/COOKIE 三种变量的第一个字母，它的顺序体现系统处理三种变量的优先级别，从左到右，优先权依次递增。默认设置为 GPC，这样当有其中任两种或三种名称相同变量传递到服务器时，系统会按优先权排序，只读取优先权较高的变量。又比如设定成 “GP” 表示忽视 cookie，并在存取方法 (method) 相同时，以 POST 取代 GET。当然，我们在编程过程中应当尽量避免同时用不同的方式传递名称相同的变量，否则程序的可读性会变坏，而且在配置不同的系统里可能会有不同的输出结果。

magic_quotes_gpc boolean 这个参数能确定包含在 GET/POST/COOKIE 这三种变量中的特殊字符：单引号、双引号、斜杠，是否加转义字符反斜杠（就是 C 语言里常用的“”）？因为在 PHP 数据库等系统中，单引号等字符通常有特殊意义，为了和真正的字符区分，我们可以设置 magic_quotes_gpc=on，这样如果我们从用户端得到的变量中有单引号时，会在前面加转义符，然后我们可以根据需要用函数 stripslashes(string str);（该函数可去掉字串中的反斜杠转义符“”。若是连续二个反斜杠，则去掉一个，留下一个。若只有一个反斜杠，就直接去掉。）来去掉转义符“”,我们可以比较一下：

<form>

<input type="Text" value="" name="a">

<input type="Submit">

</form>

<?php

echo a;

?>

让我们分别在 magic_quotes_gpc=on 和 off 的情况下，在文本框中输入单引号、双引号，然后提交，看看有什么区别？

SMTP string 指定邮件发送服务器的域名或 IP 地址，这样我们就可以发信啦，比起微软的 ASP 来，PHP 的这个功能简单方便得多了，有人要问,如果我没有配备邮件服务器怎么办?很简单,只要填上当地 ISP 的邮件服务器就行了。其实收发邮件服务器就像我们现实生活中的邮局一样，在哪个邮局都能发信，而收信是在固定邮局。

mysql.default_host string

mysql.default_user string

mysql.default_password string

用过 ODBC 的读者们都知道，设置 ODBC 的时候总需要设置数据库所在及其默认的登录用户名和口令，这几个参数也是这个意思，不过是用在 MYSQL 里面罢了。为了安全起见，我们还有必要在 MYSQL 里对该用户的权力做一些限定，千万不要偷懒用“root“啊！如果为了方便而设置了这些参数，那我们就能直接用函数 mysql_connect()来连接数据库了，注意这里可以不用任何参数！

大家可能在想，虽然这样很方便，同时也很危险呀！别急，在 PHP 的安全模式里这些参数是无效的，下面我们来看看安全模式的设置吧。

Safe mode boolean 这可不是 WINDOWS 98 的安全模式啊。当 PHP 系统处于安全模式下时，我们就能对 PHP 程序的行为进行一定的控制，这时候一些数据库比如 MYSQL、INFOMIX 等的默认数据库主机、用户名、口令等设置无效，非法用户就不能轻易连接数据库了。而且在安全模式下 safe_mode_allowed_env_vars string 该项设置表示什么类型的系统环境变量可以被程序更改，若设置成 safe_mode_allowed_env_vars=PHP_则表示只有 PHP_打头的系统环境变量可以被修改，例如这时如果在程序中企图使用 putenv("windir=UUU");来修改环境变量，系统就会提示一个安全模式的保护错误。还有，安全模式对系统命令 system()等有一定限制，如只能在指定目录运行等，这样能对系统文件有一定的保护作用。

log_errors boolean 这个参数指定 PHP 程序出错时是否要将错误信息记录在 LOG 文档中。在 NT 系统中如果我们同时设置 error_log =syslog 的话，我们就能在事件查看器的应用程序日志里看到 PHP 所发生过的错误信息，这对测试一个大型的系统有些帮助。

error_prepend_string = "<font color=ff0000>"

error_append_string = "</font>"

这两个设置参数更有意思啦，按如上设置，那么我们一眼就能看到：我们的程序是否出错了！因为他的功能是把出错信息设置成显眼的红颜色了。

至于其它的很多选项，有的一看便知，有兴趣大家自己试试吧！