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

nemesiszh
  • 362

服务器系统是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权限啊
不知道这样的情况产生的原因是什么?

回复
阅读 1k
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);
你知道吗?

宣传栏