请教 mkdir 权限问题

2020-10-31 14:25:22 +08:00
 pinews
别人的代码出现问题,写入日志因权限被拒绝。原来创建的文件夹没有写入(?!)权限。
记得默认好像没问题,查了代码好像没什么问题,后来定位在 mkdir($dir, 777)上,官方文档是 0777,或者不写也可以,但是 777 是不行的。
我是一头雾水,传值是数值类型的,没加引号,0777 打印出来不是 511 吗?再说为什么 0777 可以得到的是 755,而 777 最后得到的反而是 1411,越看越糊涂了,
请大侠指教!!
2847 次点击
所在节点    PHP
6 条回复
nifury
2020-10-31 14:30:54 +08:00
0777 (octal) == 511 (decimal)
777 (decimal) == 1411 (octal)
weirdo
2020-10-31 14:48:53 +08:00
0 开头的数是八进制
0x 开头的数是十六进制
0b 开头的数是二进制
其他情况都是十进制
pinews
2020-10-31 16:09:12 +08:00
搜索了一番,自问自答吧,这个参数,显然并不是直接按数字来设置的,当然也不是按字符串设置的。
这个参数 4 个字符,第一个叫特殊权限,可以有 0,1,2,4,4 个数字 1 是粘滞,2,SUID,4,SGID,0 是默认的,没有特殊权限,设置为 777 最后变成 755 的原因是 umask,默认为 022,
而 0777 变成 755,是经过 3 次转换得到的,先变成 10 进制,而内部再转换成 8 进制,最后再用 umask,
既然 0777==511,那最终的效果也是一样的,
省略第一位,用后三位与想要的权限对照是不对的,也就是说 4 位数字不但是直观的,也是准确的,因为内部做了处理,省略第一位是一个简单思维的错误。
pinews
2020-10-31 16:10:47 +08:00
显然并不是直接按“直观数字”来设置的。
happy7902
2020-11-01 10:53:38 +08:00
外行可能觉得你是个专家,但实际你可能没入门
xiebruce
2020-12-12 01:45:37 +08:00
擦,这个 0777 我以为 0 是不设置 suid 的意思呢,毕竟 chmod 是可这么设置的: https://www.xiebruce.top/1387.html

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/720459

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX