今天,我们来侃侃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文件
if (strstr(strtoupper( PHP_SELF),"/PHPTEST/"))
echo "我的广告!
";
?>
这样只要设置: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);(该函数可去掉字串中的反斜杠转义符“”。若是连续二个反斜杠,则去掉一个,留下一个。若只有一个反斜杠,就直接去掉。)来去掉转义符“”,我们可以比较一下:
让我们分别在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 のセーフ モードでは無効です。セーフ モードの設定を見てみましょう。
セーフ モード ブール値 これは WINDOWS 98 のセーフ モードではありません。 PHP システムがセーフ モードの場合、この時点で、MYSQL、INFOMIX などの一部のデータベースのデフォルトのデータベース ホスト、ユーザー名、パスワード、その他の設定をある程度制御できます。は無効であり、不正なユーザーは簡単にデータベースに接続できません。また、セーフ モードでは、safe_mode_allowed_env_vars 文字列設定は、プログラムによってどのような種類のシステム環境変数を変更できるかを示します。 これが、safe_mode_allowed_env_vars=PHP_ に設定されている場合は、PHP_ で始まるシステム環境変数のみを変更できることを意味します。この時点でプログラム内で putenv("windir=UUU"); を使用して環境変数を変更しようとすると、システムによりセーフ モード保護エラーが表示されます。さらに、セーフ モードには、system() などのシステム コマンドに対して、指定されたディレクトリでのみ実行できるなど、特定の制限があります。これにより、システム ファイルをある程度保護できます。
Log_errors boolean このパラメータは、PHP プログラムでエラーが発生したときに、エラー情報を LOG ドキュメントに記録するかどうかを指定します。 NT システムでは、error_log =syslog を設定すると、PHP で発生したエラー情報がイベント ビューアのアプリケーション ログで確認できるため、大規模システムのテストに役立ちます。
error_prepend_string = ""
error_append_string = ""
これらの 2 つの設定パラメータを上記のように設定すると、さらに興味深いことがわかります。一目でわかる 参照: 私たちのプログラムは間違っていましたか?なぜなら、彼の機能はエラー メッセージを目立つ赤色に設定することだからです。
他の多くのオプションについては、一目でわかるものもありますので、興味があればぜひ試してみてください。