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的f中的Directory配置
php_admin_value open_basedir "指定⽬录"
php_admin_value open_basedir "指定⽬录"
fastcgi_param PHP_VALUE "open_basedir=指定⽬录"
⽤open_basedir指定的限制实际上是前缀,不是⽬录名。
也就是说 open_basedir=/home/fdipzone 也会允许访问/home/fdipzone_abc,如果要将访问限制为⽬录,请使⽤斜线结束路径名,例如:open_basedir=”/home/fdipzone/”
如果要设置多个⽬录,window使⽤;分隔⽬录,linux使⽤:分隔⽬录。
fopen和open区别3.使⽤open_basedir限制⽬录访问
⾸先创建⼀个VirtualHost,
设置open_basedir 为/home/fdipzone/sites/in.fdipzone/
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /home/fdipzone/sites/in.fdipzone
ServerName in.fdipzone
php_admin_value open_basedir "/home/fdipzone/sites/in.fdipzone/"
<Directory "/home/fdipzone/sites/in.fdipzone">
allow from all Options + Indexes
</Directory>
</VirtualHost>
在上⼀层⽬录 /home/fdipzone/sites/ 中创建⼀个⽂件,在in.fdipzone中创建php执⾏以下代码
<?php
echo file_get_contents('../');
>
因为不在限定的⽬录范围内,因此php提⽰警告
Warning: file_get_contents(): open_basedir restriction in effect. File(../) is not within the allowed path(s):
(/home/fdipzone/sites/in.fdipzone/) in /home/fdipzone/sites/in.fdipzone/index.php on line 3
4.设置open_basedir的性能分析
open_basedir开启后会影响I/O,因为每个调⽤的⽂件都需要判断是否在限制⽬录内。
测试程序,读取限制⽬录内同⼀⽂件10000次
<?php
// 记录开始时间
$starttime = getMicrotime();
// 读取10000次⽂件
for($i=0; $i<10000; $i++){
file_get_contents('');
}
// 记录结束时间
$endtime = getMicrotime();
printf("run time %f ms\r\n", ((float)($endtime)-(float)($starttime))*1000);
function getMicrotime(){
list($usec, $sec) = explode(' ', microtime());
return (float)$usec + (float)$sec;
}
>
关闭open_basedir测试
run time 137.237072 ms
打开open_basedir测试
run time 404.207945 ms
开启open_basedir后,执⾏时间是关闭的3倍。
总结:使⽤open_basedir可以限制程序可操作的⽬录和⽂件,提⾼系统安全性。但会影响I/O性能导致系统执⾏变慢,因此需要根据具体需求,在安全与性能上做平衡。
以上这篇php⽂件包含⽬录配置open_basedir的使⽤与性能详解就是⼩编分享给⼤家的全部内容了,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论