2010-10-22 17 views

Respuesta

108

El modo es modificado por su actual umask, que es 022 en este caso.

La forma en que funciona el umask es sustractivo. Se toma el permiso inicial dado a mkdir y resta el umask para obtener el permiso real :

0777 
- 0022 
====== 
    0755 = rwxr-xr-x. 

Si no desea que esto ocurra, es necesario establecer su umask temporalmente a cero por lo que no tiene efecto. Usted puede hacer esto con el siguiente fragmento: cambia

$oldmask = umask(0); 
mkdir("test", 0777); 
umask($oldmask); 

La primera línea de la umask a cero, mientras que el almacenamiento de la anterior en $oldmask. La segunda línea hace que el directorio use los permisos deseados y (ahora irrelevante) umask. La tercera línea restaura el umask a lo que era originalmente.

Consulte el PHP doco para umask y mkdir para obtener más información.

2

Probablemente, su umask está ajustado para excluir los

12

La creación de archivos y directorios se ve afectado por el ajuste de la máscara de usuario. Puede crear archivos con un determinado conjunto de permisos mediante la manipulación de umask de la siguiente manera: -

$old = umask(0); 
mkdir("test", 0777); 
umask($old); 
0

Para aquellos que intentó

mkdir('path', 777);

y no funcionó.

Es porque, aparentemente, el 0 que precede al modo de archivo es muy importante, lo que le dice a chmod que interprete el número pasado como un octal en lugar de un decimal.

Reference

Sal. Esta no es una solución a la pregunta, sino solo un complemento al motor aceptado.

0

Evite utilizar esta función en servidores web multiproceso. Es mejor cambiar los permisos de archivo con chmod() después de crear el archivo.

Ejemplo:

$dir = "test"; 
$permit = 0777; 

mkdir($dir); 
chmod($dir, $permit); 
Cuestiones relacionadas