开发者

Recursive mkdir() and chmod()?

开发者 https://www.devze.com 2022-12-15 22:58 出处:网络
When using mkdir() with the recursive flag set to true do all the created directories get the specified chmod or just the last one? For example:

When using mkdir() with the recursive flag set to true do all the created directories get the specified chmod or just the last one? For example:

mkdir('/doesnotExist1/doesn开发者_如何学编程otExist2/doesnotExist3/', 0755, true);

Will the newly created directories /doesnotExist1/ and /doesnotExist1/doesnotExist2/ also get the same chmod as /doesnotExist1/doesnotExist2/doesnotExist3/ = 0755?

If not, is there any way to force the above behavior?

I would test this myself, but I don't have access to a *nix box ATM.


Just tested on gentoo linux with PHP 5.2.12: They all have the same permissions.

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


The C function responsible for mkdir('localfilesystem', x, true) is php_plain_files_mkdir() in main/streams/plain_wrapper.c. And it calls php_mkdir(dir, mode TSRMLS_CC); for the "first" directory it is supposed to create and VCWD_MKDIR(buf, (mode_t)mode)) for all subdirectories. php_mkdir() does some safe mode checking and then also calls VCWD_MKDIR So yes, the mode parameter is used for all directories created by mkdir(p, x, true).

0

精彩评论

暂无评论...
验证码 换一张
取 消