thinkphp5的mkdir() Permission denied问题

最近一直在用tp5写项目,在此遇到的问题也比较多。今天来谈谈“mkdir() Permission denied”错误。javascript

你若是不单单写代码,还得部署到线上,那么这个tp5的这个错误,你有很大几率会碰见它。java

由于这跟文件的权限有关系,特别是自动生成的文件或者目录类的权限,linux服务器出于安全因素对于用户的权限有着严格的控制。linux

对于tp框架而言,自动生成的文件或者目录应该是runtime目录,因此在线部署代码的时候,开放此类目录的权限。nginx

因此解决mkdir() premission denied 的问题最直接的方式,把runtime权限放开,让全部用户均可以建立它。web

chmod -R 777 runtime

在liunx中进入项目目录执行以上命令,就能解决这个问题,简单,高效。apache

若是你对文件的安全要求比较苛刻,那么以上的答案并不能令你满意,简单,高效的方法背后通常须要牺牲一些安全因素为代价。安全

但如下提供的方法或许是一个不错的选择。服务器

更改runtime目录的全部者,也就是runtime这个目录权限只针对全部者开放。框架

以个人项目为例,服务器是nginx,nginx中设置的访问用户为www用户,那么我只须要把runtime目录有root用户改成www用户就能解决此问题。spa

ps aux|grep nginx //查看当前的nginx进程,可以找到nginx用户是哪一个(多是www,user或者其余的) chown -R www runtime //chown -R <nginx 用户> runtime,改变runtime全部者为nginx用户

ok,进入项目目录去执行上面的命令吧,是否有效一试便知。

上面的方法的解释是由于对于web的每个请求都是由服务器(nginx,apache等)代劳的,真正操做这些项目文件或目录的是这些服务器用户,好比nginx中的www用户,apache中的apache用户。因此指定文件或者目录的全部者就是这个问题的关键,至于第一个方法设置最高权限为什么也能够呢,这个就至关于任何用户都能访问这个runtime目录,固然也包括www或者apache用户。退一步,上面的第二个方法是以nginx为例,若是你的服务器是apache呢,那你如今应该知道怎么改了吧。

相关文章
相关标签/搜索