【问题标题】:Recursive mkdir() and chmod()?递归 mkdir() 和 chmod()?
【发布时间】:2011-01-04 02:36:26
【问题描述】:

当使用 mkdir() 并将递归标志设置为 true 时,所有创建的目录都获得指定的 chmod 还是仅获得最后一个?例如:

mkdir('/doesnotExist1/doesnotExist2/doesnotExist3/', 0755, true);

新创建的目录/doesnotExist1//doesnotExist1/doesnotExist2/ 是否也会获得与/doesnotExist1/doesnotExist2/doesnotExist3/ = 0755 相同的chmod?

如果没有,有没有办法强制上述行为

我自己会对此进行测试,但我无法使用 *nix box ATM。

【问题讨论】:

  • 这肯定属于服务器故障?
  • @ILMV:不;这是关于 PHP 的。
  • @ILMV - 这是关于 PHP 的mkdir 的问题,所以我不这么认为。

标签: php permissions chmod mkdir


【解决方案1】:

负责 mkdir('localfilesystem', x, true) 的 C 函数是 main/streams/plain_wrapper.c 中的 php_plain_files_mkdir()。它为它应该创建的“第一个”目录调用php_mkdir(dir, mode TSRMLS_CC);,为所有子目录调用VCWD_MKDIR(buf, (mode_t)mode))。 php_mkdir() 进行一些安全模式检查,然后还调用VCWD_MKDIR 所以是的,mode 参数用于 mkdir(p, x, true) 创建的所有目录。

【讨论】:

    【解决方案2】:

    刚刚在 gentoo linux 上使用 PHP 5.2.12 进行了测试:它们都具有相同的权限。

    soulmerge@shark-g:~$ php -a
    Interactive shell
    
    php > mkdir('asd/def/ghi', 0700, 1);
    php > ^C
    soulmerge@shark-g:~$ ls -hal asd
    total 12K
    drwx------  3 soulmerge soulmerge 4.0K 2010-01-12 10:32 .
    drwxr-xr-x 79 soulmerge soulmerge 4.0K 2010-01-12 10:32 ..
    drwx------  3 soulmerge soulmerge 4.0K 2010-01-12 10:32 def
    

    【讨论】:

    • 这很快,谢谢!很高兴 PHP 足够聪明,可以做到这一点。 =)
    猜你喜欢
    • 2010-10-18
    • 2011-04-15
    • 2011-03-08
    • 2012-11-02
    • 2017-06-18
    • 2012-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多