1.open_basedir介绍
前言:前些日我用lnmp一键安装包出现了open_basedir的问题,因为我把项目目录变了,所以要在的fastcgi.conf下面加上open_basedir的目录
2.open_basedir设置方法
open_basedir="指定目录"
ini_set('open_basedir', '指定目录');
3.在apache的httpd.conf中的Directory配置
php_admin_value open_basedir "指定目录"
php_admin_value open_basedir "指定目录"
fastcgi_param PHP_VALUE "open_basedir=指定目录"
如果要设置多个目录,window使用;分隔目录,Linux使用:分隔目录。
3.使用open_basedir限制目录访问
首先创建一个VirtualHost,
设置open_basedir 为/home/fdipzone/sites/in.fdipzone.com/
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /home/fdipzone/sites/in.fdipzone.com
ServerName in.fdipzone.com php_admin_value open_basedir "/home/fdipzone/sites/in.fdipzone.com/" <Directory "/home/fdipzone/sites/in.fdipzone.com"> allow from all Options + Indexes </Directory> </VirtualHost>
在上一层目录 /home/fdipzone/sites/ 中创建一个test.txt文件,在in.fdipzone.com中创建php执行以下代码
<?php
echo file_get_contents('../test.txt'); ?>
4.设置open_basedir的性能分析
open_basedir开启后会影响I/O,因为每个调用的文件都需要判断是否在限制目录内。
<?php
// 记录开始时间
$starttime = getMicrotime(); // 读取10000次文件 for($i=0; $i<10000; $i++){ file_get_contents('test.txt'); } // 记录结束时间 $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可以限制程序可操作的目录和文件,提高系统安全性。但会影响I/O性能导致系统执行变慢,因此需要根据具体需求,在安全与性能上做平衡。