怎么用opendir访问本地根目录以外的目录

上周帮客户做了网站迁移,今天客户风风火火的找到我,说后台无法清除缓存。

我后台进入后一测试,果然如此。因为清除缓存其实就是删除目录里面的缓存文件,于是首先考虑到权限问题

但是是windows2018,不同于Linux权限那么复杂,基本上可以排除了。

于是我打开程序源码,查看信息

因为在网站后台是删除掉WEB和手机站的缓存信息,后台管理也是和WEB、WAP手机站分开的。这里相当于是跨站点删除目录了。

也就是说后台管理站并非删除自身站点里的目录,而是跨站删除。也就是突破了自身根目录。

在一般情况下,是可以直接访问的,除非PHP.ini做了限制

报错:open_basedir()无法opendir外部文件的错。

原因:站点根目录为public, 要访问上一级目录下的文件,需开启外部访问权限

1、检查nginx的配置文件fastcgi.conf 是否设置了open_basedir(一般在最后一行),fastcgi_param PHP_ADMIN_VALUE “open_basedir=$document_root:/tmp/:/proc/” ,其中$document_root是站点根目录,将这整行注释掉,或者改成“open_basedir=$document_root/../:/tmp/:/proc/”

2、php.ini是否设置了open_basedir配置,如果有改成正确配置

3、使用.user.ini文件设置:open_basedir=/home/wwwroot/yestar.whrango.cc:/tmp/:/proc/,注意要使用chattr +i .user.ini 将文件设置为不可修改;一个服务器使用多种php框架建议将1、2关闭,通过.user.ini设置,这样可以针对不同框架的站点进行设置,灵活性更强;如果一个服务器只有一种php框架,可以在fastcgi.conf 或者php.ini里面设置,一劳永逸

开启权限的方式有多种,最好的方式是在站点根目录下(public文件夹下)配置.user.ini文件,将“open_basedir = /home/wwwroot/xxx.com/public:/tmp/:/proc/”改成“open_basedir = /home/wwwroot/xxx.com:/tmp/:/proc/”

使用.user.ini最关键的步骤是:修改完要重启php-fpm,命令:service php-fpm restart