php文件包含目录配置open_basedir的使用与性能详解
1.open_basedir介绍
open_basedir将php所能打开的文件限制在指定的目录树中,包括文件本身。当程序要使用例如fopen()或file_get_contents()打开一个文件时,这个文件的位置将会被检查。当文件在指定的目录树之外,程序将拒绝打开。
本指令不受安全模式打开或关闭的影响。
2.open_basedir设置方法
1.在php.ini加入
open_basedir="指定目录"
2.在程序中使用
ini_set('open_basedir','指定目录');
但不建议使用这种方法
3.在apache的httpd.conf中的Directory配置
php_admin_valueopen_basedir"指定目录"
httpd.conf中的VritualHost
php_admin_valueopen_basedir"指定目录"
4.nginxfastcgi.conf
fastcgi_paramPHP_VALUE"open_basedir=指定目录"
用open_basedir指定的限制实际上是前缀,不是目录名。
也就是说open_basedir=/home/fdipzone也会允许访问/home/fdipzone_abc,如果要将访问限制为目录,请使用斜线结束路径名,例如:open_basedir=”/home/fdipzone/”
如果要设置多个目录,window使用;分隔目录,linux使用:分隔目录。
3.使用open_basedir限制目录访问
首先创建一个VirtualHost,
设置open_basedir为/home/fdipzone/sites/in.fdipzone.com/
ServerAdminwebmaster@localhost DocumentRoot/home/fdipzone/sites/in.fdipzone.com ServerNamein.fdipzone.com php_admin_valueopen_basedir"/home/fdipzone/sites/in.fdipzone.com/" allowfromallOptions+Indexes
在上一层目录/home/fdipzone/sites/中创建一个test.txt文件,在in.fdipzone.com中创建php执行以下代码
因为test.txt不在限定的目录范围内,因此php提示警告
Warning:file_get_contents():open_basedirrestrictionineffect.File(../test.txt)isnotwithintheallowedpath(s):(/home/fdipzone/sites/in.fdipzone.com/)in/home/fdipzone/sites/in.fdipzone.com/index.phponline3
4.设置open_basedir的性能分析
open_basedir开启后会影响I/O,因为每个调用的文件都需要判断是否在限制目录内。
测试程序,读取限制目录内同一文件10000次
关闭open_basedir测试
runtime
打开open_basedir测试
runtime
开启open_basedir后,执行时间是关闭的
总结:使用open_basedir可以限制程序可操作的目录和文件,提高系统安全性。但会影响I/O性能导致系统执行变慢,因此需要根据具体需求,在安全与性能上做平衡。
以上这篇php文件包含目录配置open_basedir的使用与性能详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。