php - try - file_put_contents(meta/services.json): error al abrir la secuencia: Permiso denegado
try catch laravel (29)
Soy nuevo en Laravel. Estaba intentando abrir http://localhost/test/public/
y obtuve
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.
Cambié debug=>true
en app.php
y visité la página y obtuve el error en el controlador de excepciones:
La secuencia o el archivo "/var/www/html/test/app/storage/logs/laravel.log" no se pudo abrir: 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 manejador de excepciones'' desapareció y se carga una página. Pero ahí estoy obteniendo esto:
file_put_contents (/var/www/html/laravel/app/storage/meta/services.json): error al abrir la transmisión: permiso denegado
Tengo los mismos errores en mi proyecto ...
Pero descubrí que olvidé ponerenctype
en mi forma.
<form method="#" action="#" enctype="multipart/form-data">
Espera que ayude en alguna parte de alguna manera ...
¡NUNCA LE DÉ EL PERMISO 777!
vaya al directorio del proyecto laravel en su terminal y escriba:
sudo chown -R your-user:www-data /path/to/your/laravel/project/
sudo find /same/path/ -type f -exec chmod 664 {} /;
sudo find /same/path/ -type d -exec chmod 775 {} /;
sudo chgrp -R www-data storage bootstrap/cache
sudo chmod -R ug+rwx storage bootstrap/cache
De esta forma, usted está haciendo que su usuario sea el propietario y otorgue privilegios:
1 Ejecutar, 2 Escribir, 4 Leer
1 + 2 + 4 = 7 significa (rwx)
2 + 4 = 6 significa (rw)
finalmente, para el acceso de almacenamiento, ug + rwx significa que le está dando al usuario y al grupo un 7
¡Definir el permiso para 777 definitivamente es una idea terrible!
... pero
Si obtiene un error de permiso conectado con la carpeta "almacenamiento", eso es lo que funcionó para mí:
1) Establezca el permiso de "almacenamiento" y sus subcarpetas en 777 con
sudo chmod -R 777 storage/
2) En el navegador vaya a la página de inicio de laravel laravel / public / (laravel creará los archivos de almacenamiento iniciales necesarios)
3) Devuelve el permiso 775 seguro al almacenamiento y sus subcarpetas
sudo chmod -R 775 storage/
Cada vez que cambio app.php obtengo un permiso denegado escribiendo bootstrap / cache / services.json, así que hice esto para solucionarlo:
chmod -R 777 bootstrap/cache/
Después de muchos intentos de prueba y error con el 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 tan estúpido como para seguir buscando la solución en la dirección equivocada.
En Linux puede usar df -h
para verificar el tamaño de su disco y espacio libre.
En mi caso, la solución fue cambiar el permiso a los directorios app/storage/framework/views
y app/storage/logs
.
Este problema en realidad es causado por diferentes usuarios que desean write/read
archivo pero se les niega la causa de una propiedad diferente. tal vez usted como laravel ''root'' instalado antes de iniciar sesión en su sitio como usuario ''laravel'' donde ''laravel'' es la propiedad predeterminada, por lo que este es el verdadero problema aquí. Entonces cuando el usuario ''laravel'' quiere leer / escribir todo el archivo en el disco como predeterminado, para ser denegado, causa que el archivo tenga propiedad por ''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 first ownership que instaló antes -
your-user-name
como propietario predeterminado que realmente escribe / lee en el sitio. -
namefolder
como carpeta de nombre que quiere cambiar la propiedad.
He intentado dar acceso al 777
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 comando
chmod 777 -R storage
Inténtalo de nuevo con chmod -R 755 /var/www/html/test/app/storage
. Usar con sudo para Operation not permitted
en chmod. Utilice Comprobar el permiso del propietario si todavía tiene el error.
La sugerencia de vsmoraes funcionó para mí:
Laravel> = 5.4
php artisan cache:clear
chmod -R 777 storage/
composer dump-autoload
Laravel <5.4
php artisan cache:clear
chmod -R 777 app/storage
composer dump-autoload
No deberías dar 777 permisos. Es un riesgo de seguridad. Para los usuarios de Ubuntu, en Laravel 5, solicito cambiar el propietario para el almacenamiento de directorio recursivamente:
Pruebe lo siguiente:
sudo chown -R www-data:www-data storage
En sistemas basados en Ubuntu, www-data es un usuario de Apache.
PARA CUALQUIER PERSONA QUE EJECUTA UN SO OS CON SELINUX: La forma correcta de permitir que httpd escriba en la carpeta de almacenamiento de laravel es:
sudo semanage fcontext -a -t httpd_sys_rw_content ''/path/to/www/storage(/.*)?''
Luego, para aplicar los cambios de inmediato:
sudo restorecon -F -r ''/path/to/www/storage''
Puede ser difícil lidiar con SELinux, pero si está presente, le aconsejaría ENCARECIDAMENTE que lo aprenda en lugar de eludirlo por completo.
Para LARAVEL 5, intente crear carpetas de caché , sesiones y vistas en storage / framework con el permiso 777.
Para los usuarios de Google que han enfrentado 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 la carpeta de storage/logs
con diferentes permisos.
Lo que sucede es que su configuración de Laravel está configurada para registrar errores diariamente y, por lo tanto, su servidor web (apache / nginx) puede crear este archivo en un usuario predeterminado dependiendo de su entorno. Puede ser algo como _www
en OSX o www-data
en sistemas * NIX , el problema surge cuando es posible que haya ejecutado algunos comandos artesanales y haya obtenido algunos errores, por lo que el artesano escribirá este archivo pero con un usuario diferente porque PHP en el terminal lo ejecuta un usuario diferente, realmente su usuario de inicio de sesión, puede verificarlo ejecutando este comando:
php -i | grep USER
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 archivos de registro con 655
permisos de forma predeterminada, 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, de modo 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 de forma permanente, es posible que desee configurar los permisos adecuados cuando se cree un nuevo archivo en el directorio de storage/logs
al heredar los permisos del directorio, esta respuesta https://unix.stackexchange.com/a/115632 puede ayudarlo para hacer frente con eso.
Para todos los que usan Laravel 5, Homestead y Mac prueben esto:
mkdir storage/framework/views
Para usuarios vagabundos, la solución es:
(en vagabundo) php artisan cache: clear
(fuera de vagabundo) chmod -R 777 aplicación / almacenamiento
(en vagabundo) compositor dump-autoload
¡Asegúrate de que chmod en tu entorno local y no dentro de vagabundo es importante aquí!
Problema resuelto
php artisan cache:clear
sudo chmod -R 777 vendor storage
esto permite el permiso de escritura para la aplicación, el marco, los registros Espero que esto ayude
Según Laravel 5.4, que es la última vez que escribo esto, si tiene algún problema como este, debe cambiar el permiso. NO ESCUCHE A NADIE QUE LE INDIQUE ESTABLECER EL 777 PARA CUALQUIER DIRECTORIO. Tiene un problema de seguridad. Cambia el permiso de la carpeta de almacenamiento como esta
sudo chmod -R 775 storage
Cambiar el permiso de la carpeta de arranque como este
sudo chmod -R 775 bootstrap/cache
Ahora asegúrese de que está ejecutando ambos comandos desde su directorio de aplicaciones. No tendrá problemas en el futuro con respecto al permiso. 775 no compromete la seguridad de su máquina.
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 ciegamente chmod 777 aquí está mi sugerencia.
Compruebe el comando que está utilizando para los permisos que apache necesita:
fopen(''filepath/filename.pdf'', ''r'');
La ''r'' significa abrir solo para 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:
fopen(''filepath/filename.pdf'', ''r+'');
Luego, asegúrese de que apache también tenga permisos para escribir en el archivo.
Si tiene Laravel 5 y busca una solución permanente, aplicable tanto el uso de la línea de comando de php artisan
como el servidor Apache, use esto:
sudo chmod -R 777 vendor storage
echo "umask 000" | sudo tee -a /etc/resolv.conf
sudo service apache2 restart
Vea la explicación detallada here .
Si usa laradock, intente chown -R laradock:www-data ./storage
en su contenedor de espacio de trabajo
Sugerir el permiso correcto, si para Apache,
sudo chown -R apache:apache apppath/app/storage
Tengo el mismo problema cuando ejecuto vagabundo en mac. Resolvió el problema cambiando el usuario del servidor Apache en el archivo https.conf:
# check user for php
[vagrant] ubuntu ~ $ php -i | grep USER
USER => ubuntu
$_SERVER[''USER''] => ubuntu
[vagrant] ubuntu ~ $
Ejecute apache en el usuario de php en lugar del daemon del usuario para resolver el problema de acceso a archivos con php
# change default apache user from daemon to php user
sudo sed -i ''s/User daemon/User ubuntu/g'' /opt/lampp/etc/httpd.conf
sudo sed -i ''s/Group daemon/Group ubuntu/g'' /opt/lampp/etc/httpd.conf
ahora, apache puede leer y editar el archivo de caché creado por PHP sin mostrar ningún error de permiso de acceso.
Tuve el mismo problema y los pasos a continuación me ayudaron a solucionar el problema.
- Descubra el usuario de apache: creó un archivo test.php en la carpeta pública con el código
<?php echo exec(''whoami''); ?>
Y ejecuta el archivo desde el navegador web. Le daría al usuario Apache. En mi caso, es ec2-user ya que estaba usando el aws con cronjob instalado en /etc/cron.d/. Podría ser un usuario diferente para los demás.
- Ejecute el siguiente comando en la línea de comando.
sudo chown -R ec2-user:<usergroup> /app-path/public
Necesita identificar y usar el "usuario" y el "grupo de usuarios" correctos aquí.
Tuve un problema similar. (Permiso denegado mientras los permisos estaban configurados correctamente) con Laravel 5.2 y 5.5
El problema era que SELinux estaba habilitado, lo que evita que Apache escriba archivos incluso con el modo 777. Consulte Solve 500 Laravel de respuesta (Uncaught UnexpectedValueException: Laravel.log) para la pregunta y la respuesta.
Quizás esto resuelva el problema para ti también.
Xampp para su uso:
cd /Applications/XAMPP/htdocs
chmod -R 775 test/app/storage
algunas veces SELINUX causó este problema; puedes desactivar selinux con este comando.
sudo setenforce 0
rm storage/logs/laravel.log
resuelto esto para mí