南京华籁云信息技术有限公司
18066058025 025-85999293
  1. 首页 > 解决方案 > 技术博客

thinkphp5的mkdir() Permission denied问题探讨

作者:华籁云 日期:2019-10-29 12:31:13 点击数:

最近一直在用tp5写项目,在此遇到的问题也比较多。今天来谈谈“mkdir() Permission denied”错误。你如果不仅仅写代码,还得部署到线上,那么这个tp5的这个错误,你有很大概率会遇见它。

因为这跟文件的权限有关系,特别是自动生成的文件或者目录类的权限,linux服务器出于安全因素对于用户的权限有着严格的控制。对于tp框架而言,自动生成的文件或者目录应该是runtime目录,所以在线部署代码的时候,开放此类目录的权限。所以解决mkdir() premission denied 的问题最直接的方式,把runtime权限放开,让所有用户都可以创建它。

chmod -R 777 runtime

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

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

但以下提供的方法或许是一个不错的选择。

更改runtime目录的所有者,也就是runtime这个目录权限只针对所有者开放。

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

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呢,那你现在应该知道怎么改了吧。

用了chown -R 和 chmod -R 777 都不行的同学看这里:

chcon -R -t httpd_sys_rw_content_t <RUNTIM_DIR_PATH>

以上就是对tp5解决mkdir() Permission denied这个问题的探讨方法,希望对你有益。


关于我们:华籁云(www.hualaiyun.cn)隶属南京华籁云信息技术有限公司,是一家专注于网站及服务器综合业务提供商。服务包括:南京网站建设南京域名注册南京虚拟主机南京服务器租用南京服务器维护南京网站维护,公司配有客服、技术、开发等部门,拥有数名安全专家,7*24为用户提供技术服务。

欢迎联系华籁云(HUALAIYUN)我们将竭诚为您服务!

接待地址:南京市文景路61号垠坤创芯汇(各区均有办公接待处) 贴心服务:一个电话免费预约来访或者上门洽谈


随便看看