脚本按日期创建目录时设置777权限失败求助
解决mkdir设置777权限失败的问题
嘿,我来帮你搞定这个权限设置的坑!你遇到的问题大概率是权限参数的格式或者函数用法不对,分两种常见脚本场景给你针对性解决方案:
如果你用的是Shell脚本
Shell里的mkdir命令需要通过-m选项指定权限,而且选项要放在目录路径之前。如果用变量管理权限,正确写法应该是这样:
# 定义权限变量 mode=777 # 递归创建多层目录并设置权限(-p用于创建嵌套结构,比如2018/March/week1这种多级目录) mkdir -p -m $mode "$filepath"
注意两个关键点:
- 必须加
-p选项,否则无法创建你需要的年>月>周这种多层嵌套目录 -m选项要放在路径参数前面,顺序错了会直接导致命令执行失败
如果你用的是PHP脚本
PHP的mkdir()函数第二个参数是权限值,但这里必须用带前缀0的八进制数,而且递归创建多级目录需要开启第三个参数true。如果直接写777,PHP会把它当成十进制处理,转成八进制后完全不是你想要的权限,甚至导致创建失败。正确代码如下:
# 设置八进制格式的777权限 $mode = 0777; # 递归创建目录并应用权限,第三个参数true允许创建多级嵌套结构 mkdir($filepath, $mode, true);
额外提醒:如果设置权限后还是不符合预期,可能是系统的umask在干扰,你可以在创建目录前临时设置umask为0,确保权限完全生效:
umask(0); mkdir($filepath, 0777, true);
快速排查小技巧
如果还是创建失败,可以先手动执行创建命令(比如Shell里直接跑mkdir -p -m 777 你的目录路径,或者PHP里打印出$filepath的值手动验证),看看是不是路径本身有语法问题,或者当前运行脚本的用户有没有目录创建权限。
内容的提问来源于stack exchange,提问作者Jonathon Roeland
相关产品推荐
相关产品推荐

