Как исправить ошибку: 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

попробуй это

  1. CD/VAR/WWW/HTML
  2. Сетенфорс 0
  3. перезапуск службы 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/ поэтому мои шаги где:

  1. Удалите все созданные кэшированные файлы: rm bootstrap/cache/*.php
  2. Создайте новый файл laravel.log и примените обновление разрешений для файла, используя:

    • chmod -R 775 storage

Ответ 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/'