递归mkdir()和chmod()?

时间:2010-01-12 09:29:42

标签: php permissions chmod mkdir

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

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

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

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

我会自己测试一下,但我无法访问* nix框ATM。

2 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:3)

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