PHP open_basedir 填坑小计

2018-07-23  本文已影响0人  非常帅气的昵称吧

日前在做项目时候, 碰见一个奇怪案例, 文件夹A中的一个文件a.php, 要require和A同级的文件夹B中的文件b.php, 大多数客户机器上都没有问题, 只有一个客户无法读取, 报错提示中有open_basedir 简单搜了下 open_basedir实际上就是将PHP所能打开的文件限制在指定的目录树中,包括文件本身。

具体配置的方式有很多中 

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=指定目录"

以上实际上设定的都是整个站点的文件限制, 但是这次遇见的问题是某个站点下的某个文件夹的限制, 又经过一番摸索, 终于完美重现问题了  实际上针对站点下的文件夹权限, 要单独配置  这里就是第五种配置方法了

5. .user.ini

在指定文件夹下新建.user.ini文件,

open_basedir=/Users/x/Desktop/www/wq_test/addons/:/Users/x/Desktop/www/wq_test/data/

比如在A文件夹下添加此文件后, 那么A下面所有的PHP文件都只能访问/Users/x/Desktop/www/wq_test/addons/或/Users/x/Desktop/www/wq_test/data/下的文件

注意:

第五种.user.ini方法 只能用于fastcgi模式  用的mamp pro 默认apache是非fastcgi模式 结果一直没生效, 切换成fastcgi模式就可以了

.user.ini。它比.htaccess用的更广,不管是nginx/apache/IIS,只要是以fastcgi运行的php都可以用这个要领

上一篇下一篇

猜你喜欢

热点阅读