递归创建mkdir()和chmod()操作?

7
当使用设置为 true 的递归标志 mkdir() 时,所有创建的目录都会获得指定的 chmod 权限还是只有最后一个目录?例如:
mkdir('/doesnotExist1/doesnotExist2/doesnotExist3/', 0755, true);

新创建的目录/doesnotExist1//doesnotExist1/doesnotExist2/是否也会得到与/doesnotExist1/doesnotExist2/doesnotExist3/相同的chmod = 0755?
如果不是,有没有办法强制执行上述行为?
我想测试一下,但我现在无法访问*nix盒子。

这肯定应该放在ServerFault上吧? - Ben Everard
2
@ILMV:不是,这是关于PHP的。 - Will Vousden
2
@ILMV - 这是关于PHP的mkdir的问题,所以我不认为会有这种情况。 - Dominic Rodger
2个回答

7

在 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足够聪明以做到这一点。=) - Alix Axel

4

负责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)创建的所有目录。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接