日前在做项目时候, 碰见一个奇怪案例, 文件夹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都可以用这个要领
网友评论