Как исправить ошибку: laravel.log не удалось открыть?
Я новичок в laravel, и я пытаюсь создать свой первый проект. по какой-то причине я продолжаю получать эту ошибку (я еще не начал кодирование)
Error in exception handler: The stream or file "/var/www/laravel/app/storage/logs/laravel.log" could not be opened: failed to open stream: Permission denied in /var/www/laravel/bootstrap/compiled.php:8423
Я читал, что это имеет какое-то отношение к разрешениям, но chmod -R 775 storage
вообще не помогло.
![Permissions]()
Ответы
Ответ 1
Итак, если у кого-то еще есть эта проблема, вот что вы делаете.
- Выход из виртуальной машины
- Используя консоль, перейдите в свою синхронизированную папку (бродяга)
-
$ sudo chmod -R 777 app/storage
Несмотря на то, что я создал проект внутри виртуальной машины с использованием пользователя виртуальной машины, папка принадлежала пользователю на реальном компьютере; поэтому, когда вы пытаетесь сделать chmod 777, я получил chmod 775.
Теперь он работает.
Спасибо всем тем, кто помог мне понять эту штуку
EDIT:
На самом деле, он не работал, он все же дал мне проблему с разрешением отказа.
Вот что я сделал, я изменил свой Vagrantfile следующим образом:
config.vm.synced_folder "./app","/var/www/", create:true,
:owner => "vagrant",
:group => "www-data",
:mount_options => ["dmode=775","fmode=664"]
Ответ 2
Никогда не устанавливайте каталог на 777. Вы должны изменить владельца каталога. поэтому установите текущего пользователя, с которым вы вошли как владелец, а пользователя веб-сервера (www-data, apache,...) как группу. Вы можете попробовать это:
sudo chown -R $USER:www-data storage
sudo chown -R $USER:www-data bootstrap/cache
затем, чтобы установить права доступа к каталогу, попробуйте это:
chmod -R 775 storage
chmod -R 775 bootstrap/cache
Обновить:
Пользователь и группа веб-сервера зависят от вашего веб-сервера и вашей ОС. чтобы выяснить, какой пользователь и группа вашего веб-сервера используют следующие команды. для использования nginx:
ps aux|grep nginx|grep -v grep
для использования Apache:
ps aux | egrep '(apache|httpd)'
Ответ 3
Иногда нам нужно делать больше, потому что
chmod -R 775 storage
Средства
7 - Owner can write
7 - Group can write
5 - Others cannot write!
Если ваш веб-сервер не работает как Vagrant, он не сможет его записать, поэтому у вас есть 2 варианта:
chmod -R 777 storage
или измените группу на пользователя веб-сервера, предположив ее www-data
:
chown -R vagrant:www-data storage
Ответ 4
Вам нужно настроить разрешения storage
и bootstrap/cache
.
-
cd
в ваш проект Laravel.
-
sudo chmod -R 777 storage
-
sudo chmod -R 777 bootstrap/cache
В зависимости от того, как настроен ваш веб-сервер, вы можете быть более конкретным с вашими разрешениями и предоставлять их только своему пользователю веб-сервера. Google WEB SERVER NAME Laravel file permissions
для получения дополнительной информации.
На момент написания, это для Laravel 5.4
Ответ 5
Это также может быть SELinux. (Centos, RedHat)
Определить статус SElinux на терминале:
$ sestatus
Если статус включен, напишите команду для отключения SElinux
$ setenforce Permissive
Или вы можете выполнить эту команду
$ sudo setenforce 0
Спасибо
Ответ 6
Добавить в composer.json
"scripts": {
"post-install-cmd": [
"chgrp -R www-data storage bootstrap/cache",
"chmod -R ug+rwx storage bootstrap/cache"
]
}
После composer install
Ответ 7
Запустите следующие команды, и вы можете добавить sudo
при запуске команды в зависимости от вашей системы:
chmod -R 775 storage/framework
chmod -R 775 storage/logs
chmod -R 775 bootstrap/cache
Ответ 8
Для всех пользователей Centos 7 в контексте Laravel нет необходимости отключать Selinux, просто выполните следующие команды:
yum install policycoreutils-python -y # might not be necessary, try the below first
semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/html/laravel/storage(/.*)?" # add a new httpd read write content to sellinux for the specific folder, -m for modify
semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/html/laravel/bootstrap/cache(/.*)?" # same as the above for b/cache
restorecon -Rv /var/www/html/ # this command is very important to, it like a restart to apply the new rules
Наконец, убедитесь, что ваши хосты, ips и виртуальные хосты правильно настроены для удаленного доступа.
Selinux предназначен для ограничения доступа даже для пользователей с правами root, поэтому можно получить доступ только к необходимым материалам, по крайней мере, из общего обзора, это дополнительная безопасность, отключение которой не является хорошей практикой, есть много ссылок, чтобы изучить Selinux, но для этого дело даже не требуется.
Ответ 9
(в Ubuntu): можно решить за 2 простых шага:
$ sudo chmod -R 777 storage
А также
$ sudo service apache2 restart
Ответ 10
Это решение специально для Laravel 5.5
Вы должны изменить разрешения для нескольких папок: chmod -R -777 хранилище/журналы chmod -R -777 хранилище/каркас для вышеуказанных папок 775 или 765 не работали для моего проекта
chmod -R 775 bootstrap/cache
Также владение папкой проекта должно быть следующим (текущий пользователь) :( пользователь веб-сервера)
Ответ 11
попробуй это
- CD/VAR/WWW/HTML
- Сетенфорс 0
- перезапуск службы httpd
Ответ 12
Я не был слишком заинтересован в изменении прав доступа к папкам на 777. Вот как я начал исправлять эту проблему.
Во-первых, я сменил пользователя, который запускает веб-сервер на моем локальном компьютере (я запускаю nginx, но принципы применимы повсюду):
$> sudo vim /etc/nginx/nginx.conf
user <my_user> #inside nginx.conf
service nginx reload
Затем я создал еще один index.php
файл в папке public/
, чтобы узнать, кто запускал мою версию php-fpm, и где я хотел бы изменить это:
<?php
phpinfo();
?>
Перезагружая страницу, я узнал, что www-data
был пользователем (в разделе "Окружение" ). Я также узнал, что я запускал php 7.1. Я начал менять пользователя:
$> sudo vim /etc/php/7.0/fpm/pool.d/www.conf
#Look for www-data or the following variables: user, group, listen.user, listen.group.
Наконец, я дал следующие разрешения для папок:
sudo chmod -R 775 ./storage/
Теперь я убедился, что я являюсь владельцем папок с помощью простого:
ls -al
Если вы установили пользователей сервера и php-fpm для себя, а папки, например, принадлежат root, то вы будете сталкиваться с этой проблемой. Это может произойти, если вы сделали sudo laravel new <project>
как root. В этом случае убедитесь, что вы используете рекурсивную команду chown
в вашем проекте, чтобы изменить настройки user:group
. В большинстве случаев по умолчанию www-data
является основным параметром для сервера и php, в этом случае необходимо убедиться, что папка не находится из www-data
досягаемости.
Мой проект настроен в моем домашнем каталоге. На Ubuntu 16.04 и Laravel 5.5.
Ответ 13
Вы могли бы сделать:
chcon -R -t httpd_sys_rw_content_t storage
Ответ 14
Для пользователей Windows
1: Нажмите "Пуск", введите INetMgr.exe и нажмите "Enter". При появлении запроса нажмите "Продолжить", чтобы повысить свои разрешения.
2: В разделе "Подключения" нажмите кнопку "+" рядом с именем вашего компьютера.
3: В диспетчере IIS дважды щелкните сайт, который вы хотите администрировать.
4: В представлении "Возможности" дважды щелкните "Аутентификация".
5: выберите "Анонимная проверка подлинности", а затем нажмите "Изменить" на панели "Действия".
6: В диалоговом окне "Редактировать анонимные проверки подлинности" щелкните параметр "Специальный пользователь" и нажмите "Установить".
7: В диалоговом окне "Установить учетные данные" введите имя пользователя и пароль, а затем нажмите "ОК".
Ответ 15
Имел эту проблему и нашел это, и это решило проблему.
![enter image description here]()
Ответ 16
Эту ошибку можно исправить, отключив Linux.
Проверьте, включен ли он
sestatus
Вы пытаетесь..
Сетенфорс 0
Ответ 17
Для этой ошибки:
Ошибка в обработчике исключений: не удалось открыть поток или файл "/var/www/laravel/app/storage/logs/laravel.log": не удалось открыть поток: отказано в доступе в /var/www/laravel/bootstrap/compiled.php: 8423
используйте эту команду в терминале:
sudo chmod -R 777 storage
Ответ 18
Сначала перейдите в проект и щелкните правой кнопкой мыши на хранилище, проверьте свойства и перейдите на вкладку Разрешения
![enter image description here]()
Измените разрешения, используя приведенный ниже код
sudo chmod -R 777 storage
Тогда ваши свойства файла могут быть
![enter image description here]()
Затем проверьте ваши настройки и выполните команду laravel, она будет работать :)
Ответ 19
В моем конкретном случае у меня был сгенерирован конфигурационный файл, который кэшировался в каталог bootstrap/cache/
поэтому мои шаги где:
- Удалите все созданные кэшированные файлы:
rm bootstrap/cache/*.php
-
Создайте новый файл laravel.log
и примените обновление разрешений для файла, используя:
Ответ 20
Исправлена моя проблема с этой командой в Centos 7.6 Server
chcon -R -t httpd_sys_content_t $SITE_PATH
chcon -R -t httpd_sys_rw_content_t $SITE_PATH
Ответ 21
Если ваш веб-сервер nginx
вы можете попробовать это
chown -R nginx:nginx storage
chown -R nginx:nginx bootstrap/cache
Ответ 22
В Laravel вы должны установить ACL storage
каталога storage
и cache
чтобы пользователь веб-сервера мог читать/писать в каталоге. Откройте новый терминал и выполните следующее:
HTTPDUSER=$(ps axo user,comm | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\ -f1)
sudo setfacl -dR -m u:"$HTTPDUSER":rwX -m u:$(whoami):rwX bootstrap/cache storage/
sudo setfacl -R -m u:"$HTTPDUSER":rwX -m u:$(whoami):rwX bootstrap/cache storage/
Рекомендации:
https://symfony.com/doc/3.4/setup/file_permissions.html#using-acl-on-a-system-that-supports-setfacl-linux-bsd
https://linux.die.net/man/1/setfacl
Ответ 23
Я столкнулся с той же самой проблемой, и вышеупомянутые ответы не помогли мне в моем случае для той же самой ошибки. Переименование/удаление bootstrap/cache/config.php
решило проблему.
Ответ 24
Инструменты управления SELinux
работа для моего проекта
semanage fcontext -a -t httpd_sys_rw_content_t '/usr/share/nginx/html/datacenter/storage(/.*)?'
restorecon -Rv '/usr/share/nginx/html/datacenter/'