V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
pinews
V2EX  ›  PHP

请教 mkdir 权限问题

  •  
  •   pinews · 2020-10-31 14:25:22 +08:00 · 2808 次点击
    这是一个创建于 1244 天前的主题,其中的信息可能已经有所发展或是发生改变。
    别人的代码出现问题,写入日志因权限被拒绝。原来创建的文件夹没有写入(?!)权限。
    记得默认好像没问题,查了代码好像没什么问题,后来定位在 mkdir($dir, 777)上,官方文档是 0777,或者不写也可以,但是 777 是不行的。
    我是一头雾水,传值是数值类型的,没加引号,0777 打印出来不是 511 吗?再说为什么 0777 可以得到的是 755,而 777 最后得到的反而是 1411,越看越糊涂了,
    请大侠指教!!
    6 条回复    2020-12-12 01:45:37 +08:00
    nifury
        1
    nifury  
       2020-10-31 14:30:54 +08:00   ❤️ 1
    0777 (octal) == 511 (decimal)
    777 (decimal) == 1411 (octal)
    weirdo
        2
    weirdo  
       2020-10-31 14:48:53 +08:00
    0 开头的数是八进制
    0x 开头的数是十六进制
    0b 开头的数是二进制
    其他情况都是十进制
    pinews
        3
    pinews  
    OP
       2020-10-31 16:09:12 +08:00   ❤️ 1
    搜索了一番,自问自答吧,这个参数,显然并不是直接按数字来设置的,当然也不是按字符串设置的。
    这个参数 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
        4
    pinews  
    OP
       2020-10-31 16:10:47 +08:00
    显然并不是直接按“直观数字”来设置的。
    happy7902
        5
    happy7902  
       2020-11-01 10:53:38 +08:00 via iPhone
    外行可能觉得你是个专家,但实际你可能没入门
    xiebruce
        6
    xiebruce  
       2020-12-12 01:45:37 +08:00
    擦,这个 0777 我以为 0 是不设置 suid 的意思呢,毕竟 chmod 是可这么设置的: https://www.xiebruce.top/1387.html
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3593 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 00:50 · PVG 08:50 · LAX 17:50 · JFK 20:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.