Tuve el mismo problema recientemente y tropecé con esta pregunta. Desafortunadamente, choppyfireballs, el OP dijo en un comentario que encontró su propia solución y simplemente aceptó una respuesta que no nos estaba ayudando a ninguno de nosotros ... Luego, después de una búsqueda y un éxito para hacer file_put_contents trabajar de nuevo, decidí compartir mi solución.
Los permisos de mis archivos y directorios estaban bien para aceptar cualquier escritura (asegúrese de que sus directorios sean chmod 757
esto dará la raíz y otros la concesión para escribir archivos en la ubicación). Si sigue sin funcionar como a mí, es porque tu sistema probablemente sea SELinux (Security Enhanced Linux).
Si quieres asegurarte escribe setenforce 0
esto cambiará a selinux al modo permisivo, ejecute su secuencia de comandos nuevamente, si funciona, significa que el problema está bien descrito.
En ese caso, active selinux atrás setenforce 1
y prueba ls -Zl
en el directorio donde se encuentra el directorio de su proyecto. esto le dará una línea como
drwx---r-x. 9 root root system_u:object_r:httpd_sys_content_t:s0 4096 Dec 8 00:25 project
o algo diferente pero httpd_sys_content_t
si usaste chcon
para transferir el contexto de un directorio a este. pero si no tienes httpd_sys_content_t
está bien porque necesitamos cambiar el contexto de ese directorio de todos modos.
primero debe aceptar cualquier public_content_rw_t
contextos para escribir el archivo. Tipo
setsebool -P httpd_anon_write on
Esto establecerá (permanentemente) el booleano httpd_anon_write
de SELinux a verdadero y cualquier contexto denominado como public_content_rw_t
tendrá los derechos para escribir cualquier archivo en su propia ubicación.
Ahora debe decirle a SELinux que el directorio de su proyecto es public_content_rw_t
o aún no podrá escribir archivos. Escriba:
semanage fcontext --add --type public_content_rw_t "/project(/.*)?"
y restorecon -RvF /project
decirle a selinux para aplicar las especificaciones anteriores.
Ahora su directorio es public_content_rw_t y debería poder escribir archivos.
Es probable que su problema se deba a que Apache no tiene permisos para escribir en la ubicación del archivo que especificó. Vaya a ese directorio y verifique los permisos y la propiedad del grupo con el ls
comando:
cd "My working file location"
ls -l .
Hay tres columnas en la salida que muestran los permisos, el propietario y el grupo del directorio. Lo más probable es que sean propiedad de root y no tengan permisos para apache
para escribir en el directorio.
Si este es el caso, verá que aparece un error en su registro de apache cuando intente crear el archivo. Intente seguir sus registros mientras ejecuta el script en su navegador:
tail -f /var/log/apache2/error.log