Soy nuevo en Laravel. Estaba intentando abrir http://localhost/test/public/
y conseguí
Error en el controlador de excepciones.
Busqué en Google y cambié el permiso del directorio de almacenamiento usando chmod -R 777 app/storage
pero fue en vano.
He cambiado debug=>true
en app.php
y visitado la página y ha obtenido un error en el controlador de excepciones:
No se pudo abrir la secuencia o el archivo "/var/www/html/test/app/storage/logs/laravel.log": no se pudo abrir la secuencia: Permiso denegado en / var / www / html / test / bootstrap / compiled. php: 8423
Luego cambié los permisos del directorio de almacenamiento usando el comando chmod -R 644 app/storage
y el error 'Error en el controlador de excepciones' desapareció y se cargó una página. Pero ahí entiendo esto:
file_put_contents (/var/www/html/laravel/app/storage/meta/services.json): no se pudo abrir la transmisión: permiso denegado
php artisan cache:clear
luegochmod -R 777 app/storage
finalmentephp artisan dump-autoload
Respuestas:
La sugerencia de vsmoraes funcionó para mí:
Laravel> = 5.4
Laravel <5.4
NOTA: NO HAGA ESTO EN NINGÚN SERVIDOR REMOTO (DISPOSITIVO O PRODUCCIÓN)
Cuando hice esta pregunta, este era un problema en mi localhost, ejecutándose en una máquina virtual. Así que pensé que configurar un 777 era lo suficientemente seguro, sin embargo, la gente tiene razón cuando dice que debe buscar una solución diferente. Prueba 775 primero
fuente
php artisan cache:clear
luegochmod -R 777 storage
, y luegocomposer dump-autoload
chmod -R 777 storage
lugarphp artisan cache:clear
Es la respuesta correcta. Luego mesudo chmod -R ug+rw storage
da los permisos correctos para mí, sin otorgarothers
privilegios de lectura / escritura o especialmente de ejecución.777
que no es específico de Laravel, pero el proceso de pensamiento para los desarrolladores de Laravel es: "haz que funcione AHORA, no me importa cómo", al igual que777
). Como regla general, nunca, nunca, establezca algo777
para que algo funcione. ENTIENDA su servidor y usuarios / roles y configúrelos en consecuencia; no hackearlo. Sus clientes confían en usted para hacer esto bien.Para los googlers que han estado enfrentando este problema con Laravel 5.
Este es un problema de permiso causado por diferentes usuarios que intentan escribir en el mismo archivo de registro dentro de
storage/logs
carpeta con diferentes permisos.Lo que sucede es que su configuración laravel probablemente esté configurada para registrar errores diariamente y, por lo tanto, su servidor web (apache / nginx) podría crear este archivo bajo un usuario predeterminado, dependiendo de su entorno, puede ser algo así como
_www
enwww-data
sistemas OSX o * NIX, entonces el problema se produce cuando puede haber ejecutado algunos comandos artesanales y obtener algunos errores, por lo que el artesano escribirá este archivo pero con un usuario diferente porque PHP en el terminal es ejecutado por un usuario diferente en realidad su usuario de inicio de sesión, puede verificarlo ejecutando este comando :Si su usuario de inicio de sesión creó ese archivo de registro en su servidor web, no podrá escribir errores en él y viceversa porque laravel escribe los archivos de registro con
655
permisos por defecto, lo que solo permite que el propietario escriba en él.Para solucionar este problema temporal, debe otorgar manualmente permisos para el grupo
664
a este archivo para que tanto su usuario de inicio de sesión como el usuario del servidor web puedan escribir en ese archivo de registro.Para evitar este problema permanentemente, es posible que desee configurar los permisos adecuados cuando se cree un nuevo archivo dentro del
storage/logs
directorio heredando los permisos del directorio, esta respuesta https://unix.stackexchange.com/a/115632 puede ayudarlo a abordar ese.fuente
No debe otorgar permisos 777. Es un riesgo de seguridad. Para los usuarios de Ubuntu, en Laravel 5, sugiero cambiar el propietario del almacenamiento del directorio de forma recursiva:
Prueba lo siguiente:
En sistemas basados en Ubuntu, www-data es usuario de apache.
fuente
chmod 777
respuestas. Gracias ~chmod 777
Es una pesadilla completa.chmod 777
consecuencias?Para todos los que usan Laravel 5, Homestead y Mac, intenten esto:
fuente
bootstrap/cache/compiled.php
estaba tratando de escribir en este directorio, pero no existía y terminó arrojando un error de permisos. Gracias.algunas veces SELINUX causó este problema; Puede deshabilitar selinux con este comando.
fuente
Problema resuelto
esto permite el permiso de escritura para la aplicación, el marco, los registros Espero que esto ayude
fuente
¡NUNCA LE PERMITA EL PERMISO 777!
vaya al directorio del proyecto laravel en su terminal y escriba:
De esta manera, convierte a su usuario en el propietario y le otorga privilegios:
1 Ejecutar, 2 Escribir, 4 Leer
1 + 2 + 4 = 7 significa (rwx)
2 + 4 = 6 significa (rw)
finalmente, para el acceso al almacenamiento, ug + rwx significa que le estás dando al usuario y al grupo un 7
fuente
Para usuarios vagabundos, la solución es:
(en vagabundo) php artisan cache: clear
(fuera de vagabundo) aplicación / almacenamiento chmod -R 777
(en vagabundo) compositor dump-autoload
¡Es importante asegurarse de que se modifique en su entorno local y no dentro de vagabundo!
fuente
Inténtalo de nuevo con
chmod -R 755 /var/www/html/test/app/storage
. Usar con sudo paraOperation not permitted
en chmod. Use Verificar permiso del propietario si aún tiene el error.fuente
Según Laravel 5.4, que es lo último mientras escribo esto, si tiene algún problema como este, debe cambiar el permiso. NO ESCUCHE A NADIE QUE LE DIGA QUE CONFIGURE 777 PARA NINGÚN DIRECTORIO. Tiene un problema de seguridad. Cambiar el permiso de la carpeta de almacenamiento como este
Cambiar el permiso de la carpeta de arranque como este
Ahora, asegúrese de ejecutar ambos comandos desde el directorio de su aplicación. No tendrá problemas en el futuro con respecto al permiso. 775 no compromete la seguridad de su máquina.
fuente
Sugiera el permiso correcto, si es para Apache,
fuente
Si tiene Laravel 5 y busca una solución permanente, tanto el
php artisan
uso de la línea de comandos como el servidor Apache lo usan:sudo chmod -R 777 vendor storage
echo "umask 000" | sudo tee -a /etc/resolv.conf
sudo service apache2 restart
Ver explicación detallada aquí .
fuente
PARA CUALQUIERA QUE EJECUTE UN SO CON SELINUX: La forma correcta de permitir que httpd escriba en la carpeta de almacenamiento laravel es:
Luego, para aplicar los cambios de inmediato:
Puede ser difícil lidiar con SELinux, pero si está presente, te aconsejo que lo aprendas en lugar de evitarlo por completo.
fuente
sudo semanage fcontext -a -t httpd_sys_rw_content_t '/path/to/www/storage(/.*)?'
Tuve el mismo problema y los pasos a continuación me ayudaron a solucionar el problema.
<?php echo exec('whoami'); ?>
Y ejecute el archivo desde el navegador web. Le daría al usuario apache. En mi caso, es ec2-user ya que estaba usando aws con cronjob instalado en /etc/cron.d/. Podría ser un usuario diferente para los demás.
sudo chown -R ec2-user:<usergroup> /app-path/public
Debe identificar y usar el "usuario" y el "grupo de usuarios" correctos aquí.
fuente
Si usa Linux o Mac, incluso también puede ejecutarlo
ssh terminal
. Puede usar la terminal para ejecutar este comando,Si está utilizando Windows, puede ejecutar usando
git bash
.Puede descargar el formulario git https://git-scm.com/downloads .
fuente
Xampp para uso:
fuente
Cada vez que cambio app.php obtengo un permiso denegado escribiendo bootstrap / cache / services.json, así que hice esto para solucionarlo:
fuente
me resolvió esto
fuente
¡Establecer el permiso para 777 es definitivamente una idea terrible!
... pero
Si obtiene un error de permiso conectado con la carpeta "almacenamiento", eso es lo que funcionó para mí:
fuente
Si usa laradock, intente
chown -R laradock:www-data ./storage
en su contenedor de espacio de trabajofuente
En mi caso, la solución era cambiar el permiso
app/storage/framework/views
y losapp/storage/logs
directorios.fuente
Si alguien más se encuentra con un problema similar con el error de permisos de archivos fopen, pero es lo suficientemente inteligente como para no chmod 777 a ciegas, esta es mi sugerencia.
Verifique el comando que está utilizando para los permisos que apache necesita:
La 'r' significa abierto para solo lectura, y si no está editando el archivo, esto es lo que debería tener configurado. Esto significa que apache / www-data necesita al menos permiso de lectura en ese archivo, que si el archivo se crea a través de laravel ya tendrá permiso de lectura.
Si por alguna razón tiene que escribir en el archivo:
Luego, asegúrese de que apache también tenga permisos para escribir en el archivo.
http://php.net/manual/en/function.fopen.php
fuente
Simplemente inicie su servidor usando
artisian
php artisian serve
Luego acceda a su proyecto desde la URL especificada:
fuente
Tengo el mismo problema cuando ejecuto vagrant en mac. resolvió el problema cambiando el usuario del servidor Apache en el archivo https.conf:
Ejecute apache con php user en lugar de user daemon para resolver el problema de acceso a archivos con php
ahora, el archivo de caché creado por php se puede leer y editar con apache sin mostrar ningún error de permiso de acceso.
fuente
Después de muchas pruebas y errores con permisos de directorio, terminé con una epifanía ... no quedaba espacio en la partición del disco. Solo quería compartir para asegurarme de que nadie más sea lo suficientemente estúpido como para seguir buscando la solución en la dirección incorrecta.
En Linux puede usar
df -h
para verificar el tamaño de su disco y el espacio libre.fuente
Este problema en realidad es causado por diferentes usuarios que desean
write/read
archivar pero denegados causan una propiedad diferente. tal vez usted como 'root' instaló laravel antes de iniciar sesión en su sitio como usuario 'laravel' donde 'laravel' es la propiedad predeterminada, por lo que este es el problema real aquí. Entonces, cuando el usuario 'laravel' quiere leer / escribir todos los archivos en el disco de manera predeterminada, para ser denegado, haga que ese archivo tenga la propiedad de 'root'.Para resolver este problema, puede seguir así:
sudo chown -hR your-user-name /root /nameforlder
o en mi caso
sudo chown -hR igmcoid /root /sublaravel
Nota:
root
como nombre de primera propiedad que instaló antesyour-user-name
como la propiedad predeterminada que realmente escribe / lee en el sitio.namefolder
como carpeta de nombre que quiere que cambie la propiedad.fuente
Espera que ayude en algún lugar de alguna manera ...
fuente
Mientras trabajaba en Windows 10 con Laragon y Laravel 4, me pareció que no había forma de cambiar los permisos manualmente, ya que la ejecución de
chmod
comandos en el terminal incorporado en Laragon no tuvo ningún efecto.Sin embargo, en este terminal era posible ir a la carpeta de almacenamiento y agregar manualmente las carpetas deseadas de esta manera:
El
cd
comando -en el terminal lo lleva a la carpeta (es posible que deba ajustar esta ruta para que se adapte a su estructura de archivos). Elmkdir
comando creará el directorio con el nombre dado.No tuve la oportunidad de probar este enfoque en Laravel 5, pero espero que funcione un enfoque similar.
Por supuesto, podría haber una mejor manera, pero al menos esta fue una solución razonable para mi situación (solucionar el error:)
file_put_contents(/var/www/html/laravel/app/storage/meta/services.json): failed to open stream
.fuente
He resuelto mi problema haciendo esto.
fuente
He tratado de dar
777
acceso a la carpeta de almacenamiento y me ha funcionado.1) vaya a su directorio raíz laravel, (
/var/www/html
para mí) y ejecute el siguiente comandofuente