Alix Axel
Alix Axel

Reputation: 154563

Recursive mkdir() and chmod()?

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/doesnotExist2/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.

Upvotes: 7

Views: 3676

Answers (2)

VolkerK
VolkerK

Reputation: 96159

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).

Upvotes: 4

soulmerge
soulmerge

Reputation: 75724

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

Upvotes: 7

Related Questions