¿Por qué obtengo "permiso denegado" en PHP cuando intento cambiar el nombre de un directorio?
-
10-07-2019 - |
Pregunta
Cambié el directorio a 777, lo mismo con el contenido del directorio. Aún así, recibo un " permiso denegado " error. ¿PHP arroja este error si apache no es el grupo / propietario, independientemente de los permisos del archivo? Aquí está la llamada que está fallando:
rename('/correct/path/to/dir/1', '/correct/path/to/dir/2');
Solución
Estás editando el directorio de nivel superior, por lo que el usuario de PHP necesita tener acceso de escritura a ese directorio.
Otros consejos
Eso es probablemente porque apache no es el propietario del directorio padre. Cambiar el nombre (o mover) un archivo es básicamente lo mismo que crear un nuevo archivo.
para aclarar, php solo puede cambiar el nombre de los directorios de los que tiene una propiedad real:
-rwxrwxrwx user user temp/
-rwxr-xr-x apache apache temp2/
-rw-r--r-- user user script.php
suponga que script.php está intentando cambiar el nombre de estos dos directorios:
// this operation fails as PHP (running as apache) does not own "temp",
// despite having write permissions
rename('temp', 'temp.bak');
// this operation is successful as PHP owns "temp2"
rename('temp2, 'temp.bak');
Intente ejecutar el siguiente script:
print_r(posix_getpwuid(getmyuid()));
print_r(pathinfo($YOUR_PATH));
Y mira lo que eso devuelve.
Otra cosa que podría ayudar a este tipo de situaciones es intentar reducir realmente los permisos. He visto ocasiones en las que apache niega el permiso de una aplicación para hacer algo porque sus permisos están configurados demasiado alto . Supongo que esto es para fomentar las buenas prácticas de seguridad.