今天使用ci3做的项目上传到服务器后,报了这样的错:Warning: require(): open_basedir restriction in effect. File(******) is not within the allowed path(s): (******) in...
网上查阅了挺多资料,大概明确了是php open_basedir 配置的问题,服务器为了安全才做了限制,PHP不能引入其授权目录上级及其以上的文件。
其实网上的说法还是挺多的,有的说需要给错误提示中的文件夹权限,有的说要修改php.ini中的open_basedir配置,有的说要修改nginx的某些配置......很容易把人搞乱。
我的解决方法:
大多数情况下,php.ini 文件的 open_basedir 设置选项是被注释的或者为 none,所以我们不需要修改php的配置文件
Nginx 需要修改 nginx.conf 或者 conf/vhost 目录下 你的域名.conf 文件,如果你的生成环境是 LNMP/LTMP 一键安装包配置那么多半就是直接修改 你的域名.conf 文件
打开.conf配置文件,搜索open_basedir,若配置文件中有此信息,则在其后面加入错误提示中的路径。
若.conf配置文件中,没有此信息,就在配置文件的php段落中加入:fastcgi_param PHP_VALUE "open_basedir=错误信息中的路径";
然后重新启动 Nginx 即可生效
注意:上面我们修改的时候用的是绝对地址,但是也可以这样直接去找网站根目录(如果你这样配置,你一定要懂不同项目有不同根目录的原理,否则也是行不通的。):
fastcgi_param PHP_ADMIN_VALUE "open_basedir=$document_root/:/tmp/:/proc/";
上面这行代码拿thinkphp来讲,如果你根目录是public,那么$document_root就会指到public;
依然会生成错误的配置如下:fastcgi_param PHP_VALUE "open_basedir=/home/wwwroot/www.thinkphp.cn/public/:/tmp/:/proc/";