2010-01-12 26 views
7

Podczas korzystania z mkdir() z ustawioną flagą rekurencyjną na wartość true wszystkie utworzone katalogi otrzymują określony chmod lub tylko ostatni? Na przykład:Rekurencyjne mkdir() i chmod()?

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

będzie nowoutworzone katalogi /doesnotExist1/ i /doesnotExist1/doesnotExist2/ również uzyskać takie same jak /doesnotExist1/doesnotExist2/doesnotExist3/ chmod = 0755?

Jeśli nie, czy istnieje sposób, aby wymusić powyższe zachowanie?

Testowałem sam, ale nie mam dostępu do bankomatu * nix box.

+0

Z pewnością należy to do błędu serwera? –

+2

@ILMV: Nie; dotyczy to PHP. –

+2

@ILMV - to pytanie o 'mkdir' PHP, więc nie sądzę. –

Odpowiedz

7

Właśnie testowane na Gentoo Linux z PHP 5.2.12: Wszystkie mają te same uprawnienia.

[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

To było szybkie, dzięki! Glad PHP jest wystarczająco inteligentny, aby to zrobić. =) –

3

Funkcja C odpowiedzialna za mkdir ('localfilesystem', X prawdziwej) jest php_plain_files_mkdir() w głównym/strumieni/plain_wrapper.c. I wywołuje php_mkdir(dir, mode TSRMLS_CC); dla "pierwszego" katalogu, który ma utworzyć i VCWD_MKDIR(buf, (mode_t)mode)) dla wszystkich podkatalogów. php_mkdir() wykonuje pewne bezpieczne sprawdzanie trybu, a następnie wywołuje VCWD_MKDIR Tak, więc parametr mode jest używany dla wszystkich katalogów utworzonych przez mkdir (p, x, true).