2010-01-12 24 views
7

Al usar mkdir() con el indicador recursivo establecido en verdadero, ¿todos los directorios creados obtienen el chmod especificado o solo el último? Por ejemplo:Recursive mkdir() y chmod()?

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

¿Los directorios de nueva creación /doesnotExist1/ y /doesnotExist1/doesnotExist2/ también obtener el mismo chmod como /doesnotExist1/doesnotExist2/doesnotExist3/ = 0755?

Si no, ¿hay alguna forma de forzar el comportamiento anterior?

Lo probaría yo mismo, pero no tengo acceso a un cajero automático * nix.

+0

Seguramente esto pertenece a serverfault? –

+2

@ILMV: No; esto es con respecto a PHP. –

+2

@ILMV - es una pregunta sobre 'mkdir' de PHP, así que no lo creo. –

Respuesta

7

Acabo de probar en gentoo linux con PHP 5.2.12: Todos tienen los mismos permisos.

[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

Eso fue rápido, gracias! Glad PHP es lo suficientemente inteligente como para hacer esto. =) –

3

La función C responsable de mkdir ('localfilesystem', x, verdadera) es php_plain_files_mkdir() en principal/arroyos/plain_wrapper.c. Llama al php_mkdir(dir, mode TSRMLS_CC); para el "primer" directorio que debe crear y al VCWD_MKDIR(buf, (mode_t)mode)) para todos los subdirectorios. php_mkdir() realiza alguna comprobación de modo seguro y luego también llama a VCWD_MKDIR Así que sí, el parámetro de modo se usa para todos los directorios creados por mkdir (p, x, true).