centos php 生产环境 遇到文件生成的权限问题

服务器系统是centos
用了宝塔面板
php版本是7.2

具体代码如下

//文件目录路径为“./attachment/qrcode/user”
$path="./attachment/qrcode/user";
if(!is_dir($path)){
    mkdir($path,"0777",1);
}
//目录创建后写入一个1.txt

1、运行后首先提示错误

mkdir(): Permission denied

查看生成文件的目录,因为attachment原来是777权限的,qrcode目录生成了,但是下面的user目录没有生成

2、给qrcode目录777权限后,再次运行,提示错误

fopen(./attachment/qrcode/user/1.txt): failed to open stream: Permission denied

查看生成文件的目录,user目录生成了,没有777权限,就继续给user目录设置777权限;
再次运行,1.txt文件就成功生成了

代码里已经设置“mkdir($path,"0777",1);”
应该是按照路径递归生成并设置777权限啊
不知道这样的情况产生的原因是什么?

阅读 3.2k
5 个回答

注意看手册:$mode 参数为 int

mkdir ( string $pathname [, int $mode = 0777 [, bool $recursive = false [, resource $context ]]] ) : bool

修改为:

mkdir($path, 0777, 1);

谢邀,看了下底层源码,第二个参数,强制要求了为int型,如果不填写,则默认为0777的权限。

'0777'0777
不一样哦

0777 是八进制,所以转成字符串应该是 '511',也不是 '0777'

mkdir($path, 0777, 1);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题