当前位置: 首页 > news >正文

解决thinkphp5的mkdir() Permission denied问题

 

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

相关文章:

  • PHP单例模式--典型的三私一公
  • 使用PHPMAILER实现PHP发邮件功能
  • 覆盖索引有何用?
  • Mysql性能优化、Mysql参数优化、Mysql配置优化
  • 搭建git服务器仓库
  • git如何恢复已经push的内容
  • php连接mysql报错:SQLSTATE[HY000] [2002] No such file or directory
  • MySQL分页优化
  • PHP使用CURL详解
  • 从输入URL到页面加载完成都在哪些层经过了哪些步骤?
  • 利用PHP访问带有密码的Redis
  • linux下安装redis服务和php扩展
  • 搭建lnmp环境,看完傻瓜都会
  • Linux定时任务执行PHP脚本每天更改数据库
  • js实现手机web页面定位
  • [deviceone开发]-do_Webview的基本示例
  • Android开发 - 掌握ConstraintLayout(四)创建基本约束
  • centos安装java运行环境jdk+tomcat
  • Dubbo 整合 Pinpoint 做分布式服务请求跟踪
  • Essential Studio for ASP.NET Web Forms 2017 v2,新增自定义树形网格工具栏
  • If…else
  • js继承的实现方法
  • leetcode讲解--894. All Possible Full Binary Trees
  • PAT A1050
  • PHP 的 SAPI 是个什么东西
  • Spring声明式事务管理之一:五大属性分析
  • SSH 免密登录
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • 给Prometheus造假数据的方法
  • 前端技术周刊 2019-01-14:客户端存储
  • 探索 JS 中的模块化
  • 学习Vue.js的五个小例子
  • ​中南建设2022年半年报“韧”字当头,经营性现金流持续为正​
  • #100天计划# 2013年9月29日
  • $.each()与$(selector).each()
  • (007)XHTML文档之标题——h1~h6
  • (7)STL算法之交换赋值
  • (a /b)*c的值
  • (ZT)出版业改革:该死的死,该生的生
  • (多级缓存)多级缓存
  • (分享)一个图片添加水印的小demo的页面,可自定义样式
  • (官网安装) 基于CentOS 7安装MangoDB和MangoDB Shell
  • (论文阅读11/100)Fast R-CNN
  • (十三)Flask之特殊装饰器详解
  • (四)模仿学习-完成后台管理页面查询
  • (五)Python 垃圾回收机制
  • (转)C语言家族扩展收藏 (转)C语言家族扩展
  • (转)清华学霸演讲稿:永远不要说你已经尽力了
  • ***原理与防范
  • .bat批处理(十一):替换字符串中包含百分号%的子串
  • .NET Remoting学习笔记(三)信道
  • .NET 设计模式—简单工厂(Simple Factory Pattern)
  • /etc/shadow字段详解
  • @RequestMapping 的作用是什么?
  • [AAuto]给百宝箱增加娱乐功能