如果建立的虚拟网站不在/home/wwwroot目录下,建在另一个目录/data/websize,要确保二个目录下的项目都能正常打开,怎么办?
1.open_basedir介绍
open_basedir 将php所能打开的文件限制在指定的目录树中,包括文件本身。当程序要使用例如fopen()或file_get_contents()打开一个文件时,这个文件的位置将会被检查。当文件在指定的目录树之外,程序将拒绝打开。
本指令不受安全模式打开或关闭的影响。
2.open_basedir设置方法
1.在php.ini 加入
open_basedir="指定目录"
2.在程序中使用
ini_set('open_basedir', '指定目录');
但不建议使用这种方法
3.nginx fastcgi.conf
fastcgi_param PHP_VALUE "open_basedir=指定目录"
用open_basedir指定的限制实际上是前缀,不是目录名。
也就是说 open_basedir=/home/fdipzone 也会允许访问/home/fdipzone_abc,如果要将访问限制为目录,请使用斜线结束路径名,例如:open_basedir=”/home/fdipzone/”
如果要设置多个目录,window使用;分隔目录,linux使用:分隔目录。
4.使用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>
#在php-fpm.conf对应的pool池中行尾配置
php_admin_value[open_basedir]=/home/wwwroot/:/proc/:/tmp/
#在nginx fastcgi fastcgi_param配置
#这里用$document_root是一种取巧的方法,也可以设置绝对路径
# set php open_basedir
fastcgi_param PHP_ADMIN_VALUE "open_basedir=$document_root/:/tmp/:/proc/";
#在php.ini行尾配置
[HOST=www.12.com]
open_basedir=/data/websize/:/proc/:/tmp/
[PATH=/data/websize/]
open_basedir=/data/websize/:/proc/:/tmp/
这三个地方配置的优先级如下
“php.ini” > “nginx fastcgi fastcgi_param” > “php-fpm.conf”
根据优先级我们配置即可:
#在php.ini行尾配置
[HOST=www.12.com]
open_basedir=/data/websize/:/proc/:/tmp/
[PATH=/data/websize/]
open_basedir=/data/websize/:/proc/:/tmp/