todos - ¿Por qué PHP no puede crear un directorio con 777 permisos?
mkdir(): permission denied (5)
El modo es modificado por su umask
actual, que es 022
en este caso.
La forma en que funciona el umask
es un sustractivo. Toma el permiso inicial dado a mkdir
y resta umask
para obtener el permiso real :
0777
- 0022
======
0755 = rwxr-xr-x.
Si no quieres que esto suceda, debes configurar tu umask
temporalmente en cero para que no tenga efecto. Puedes hacer esto con el siguiente fragmento de código:
$oldmask = umask(0);
mkdir("test", 0777);
umask($oldmask);
La primera línea cambia el valor de umask
a cero mientras se almacena el 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 la documentación de PHP para umask y mkdir para obtener más detalles.
Estoy tratando de crear un directorio en mi servidor usando PHP con el comando:
mkdir("test", 0777);
Pero no da permisos completos, solo estos:
rwxr-xr-x
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);
La creación de archivos y directorios se ve afectada por la configuración de umask. Puede crear archivos con un conjunto particular de permisos manipulando umask de la siguiente manera:
$old = umask(0);
mkdir("test", 0777);
umask($old);
Para quienes lo intentaron.
mkdir(''path'', 777);
y no funcionó.
Se debe a que, aparentemente, el 0 que precede al modo de archivo es muy importante, ya que le dice a chmod que interprete el número pasado como un octal en lugar de un decimal.
PD. Esto no es una solución a la pregunta, sino solo un complemento a la respuesta aceptada.
Probablemente, tu umask está configurado para excluir esos