Рекурсивный mkdir() и chmod()?

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

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

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

Если нет, есть ли способ принудить к такому поведению?

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


person Alix Axel    schedule 12.01.2010    source источник
comment
Конечно, это относится к ошибке сервера?   -  person Ben Everard    schedule 12.01.2010
comment
@ILMV: нет; это касается PHP.   -  person Will Vousden    schedule 12.01.2010
comment
@ILMV - это вопрос о PHP mkdir, поэтому я так не думаю.   -  person Dominic Rodger    schedule 12.01.2010


Ответы (2)


Только что протестировано на 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
person soulmerge    schedule 12.01.2010
comment
Это было быстро, спасибо! Рад, что PHP достаточно умен, чтобы сделать это. знак равно - person Alix Axel; 12.01.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 Так что да, параметр режима используется для всех каталогов, созданных mkdir(p, x, true).

person VolkerK    schedule 12.01.2010