2010-01-12 49 views
7

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

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

将新创建的目录/doesnotExist1//doesnotExist1/doesnotExist2/也得到了CHMOD为/doesnotExist1/doesnotExist2/doesnotExist3/ = 0755一样吗?

如果没有,是否有任何方法可以强制以上行为

我会自己测试这个,但是我没有访问* nix盒ATM。

+0

当然这属于serverfault? – 2010-01-12 09:31:35

+2

@ILMV:否;这是关于PHP的。 – 2010-01-12 09:33:07

+2

@ILMV - 这是关于PHP的'mkdir'的问题,所以我不这么认为。 – 2010-01-12 09:33:34

回答

7

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

[email protected]:~$ php -a 
Interactive shell 

php > mkdir('asd/def/ghi', 0700, 1); 
php > ^C 
[email protected]:~$ 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 
+0

太快了,谢谢!很高兴PHP能够做到这一点。 =) – 2010-01-12 09:39:39

3

C函数负责的mkdir( 'localfilesystem',X,真)是在主/流/ 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)创建的所有目录。