2010-01-12 8 views
7

Lorsque vous utilisez mkdir() avec l'indicateur récursif défini sur true, tous les répertoires créés reçoivent-ils le chmod spécifié ou seulement le dernier? Par exemple:mkdir récursif() et chmod()?

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

Est-ce que les obtenir répertoires nouvellement créés /doesnotExist1/ et /doesnotExist1/doesnotExist2/ aussi le même chmod que /doesnotExist1/doesnotExist2/doesnotExist3/ = 0755?

Si non, est-il possible de forcer le comportement ci-dessus?

Je voudrais tester moi-même, mais je n'ai pas accès à un * boîte ATM nix.

+0

Sûrement cela appartient à serverfault? –

+2

@ILMV: Non; C'est en rapport avec PHP. –

+2

@ILMV - c'est une question à propos de 'mkdir' de PHP, donc je ne pense pas. –

Répondre

7

Juste testé sur Gentoo Linux avec PHP 5.2.12: Ils ont tous les mêmes permissions.

[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

C'était rapide, merci! Heureux PHP est assez intelligent pour le faire. =) –

3

La fonction C responsable de mkdir ('localfilesystem', x, true) est php_plain_files_mkdir() dans principal/flux/plain_wrapper.c. Et il appelle php_mkdir(dir, mode TSRMLS_CC); pour le "premier" répertoire qu'il est censé créer et VCWD_MKDIR(buf, (mode_t)mode)) pour tous les sous-répertoires. php_mkdir() vérifie le mode sans échec et appelle ensuite VCWD_MKDIR Alors oui, le paramètre mode est utilisé pour tous les répertoires créés par mkdir (p, x, true).