在递归标志设置为true的情况下使用mkdir()
时,所有创建的目录都会获得指定的chmod还是最后一个?例如:
mkdir('/doesnotExist1/doesnotExist2/doesnotExist3/', 0755, true);
新创建的目录/doesnotExist1/
和/doesnotExist1/doesnotExist2/
是否也会获得与/doesnotExist1/doesnotExist2/doesnotExist3/
= 0755相同的chmod?
如果没有,有没有办法强制执行上述行为?
我会自己测试一下,但我无法访问* nix框ATM。
答案 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)创建的所有目录。