这里有新鲜出炉的 PHP 设计模式,程序狗速度看过来!
PHP(外文名: Hypertext Preprocessor,中文名:"超文本预处理器")是一种通用开源脚本语言。语法吸收了 C 语言、Java 和 Perl 的特点,入门门槛较低,易于学习,使用广泛,主要适用于 web 开发领域。PHP 的文件后缀名为 php。
下面小编就为大家带来一篇 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_value open_basedir "指定目录"
httpd.conf 中的 VritualHost
php_admin_value open_basedir "指定目录"
4.nginx fastcgi.conf
fastcgi_param PHP_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/
- <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');
- ?>
因为 test.txt 不在限定的目录范围内,因此 php 提示警告
Warning: file_get_contents(): open_basedir restriction in effect. File(../test.txt) is not within the allowed path(s): (/home/fdipzone/sites/in.fdipzone.com/) in /home/fdipzone/sites/in.fdipzone.com/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('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 后,执行时间是关闭的 3 倍。
总结:使用 open_basedir 可以限制程序可操作的目录和文件,提高系统安全性。但会影响 I/O 性能导致系统执行变慢,因此需要根据具体需求,在安全与性能上做平衡。
以上这篇 php 文件包含目录配置 open_basedir 的使用与性能详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持 PHPERZ。
来源: http://www.phperz.com/article/17/0808/340263.html