Рекурсивные mkdir () и chmod ()? - PullRequest
7 голосов
/ 12 января 2010

При использовании mkdir() с рекурсивным флагом, установленным в true, все созданные каталоги получают указанный chmod или только последний? Например:

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

Будут ли недавно созданные каталоги /doesnotExist1/ и /doesnotExist1/doesnotExist2/ также получать тот же chmod, что и /doesnotExist1/doesnotExist2/doesnotExist3/ = 0755?

Если нет, есть ли способ вызвать вышеуказанное поведение ?

Я бы проверил это сам, но у меня нет доступа к * nix box банкомату.

Ответы [ 2 ]

7 голосов
/ 12 января 2010

Только что протестировано на Gentoo Linux с PHP 5.2.12: у них у всех одинаковые разрешения.

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
3 голосов
/ 12 января 2010

Функция C, отвечающая за mkdir ('localfilesystem', x, true), называется php_plain_files_mkdir () в main / streams / plain_wrapper.c. И он вызывает php_mkdir(dir, mode TSRMLS_CC); для «первого» каталога, который предполагается создать, и VCWD_MKDIR(buf, (mode_t)mode)) для всех подкаталогов. php_mkdir () выполняет некоторую проверку безопасного режима, а затем также вызывает VCWD_MKDIR Так что да, параметр mode используется для всех каталогов, созданных mkdir (p, x, true).

...