Как исправить ошибку: laravel.log не может быть открыт?

75

Я новичок в 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 вообще не помогло.

Изображение 243

  • 0
    Вы уверены, что находитесь в правильном каталоге при запуске этой команды chmod? Попробуйте chmod -R 755 / var / www / laravel / app / storage. Кроме того, на что настроены пользователь и группа? Попробуйте ls -al / var / www / laravel / app / storage
  • 0
    те же результаты (я обновил свой оригинальный пост, чтобы показать разрешения для папки)
Показать ещё 4 комментария
Теги:

19 ответов

43
Лучший ответ

Итак, если у кого-то еще есть эта проблема, вот что вы делаете.

  • Выход из виртуальной машины
  • Используя консоль, перейдите в свою синхронизированную папку (бродяга)
  • $ 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"]
  • 0
    Я сделал это ... и я РОСТ! Все еще не работает ... laravel 5 ... переименовал файл журнала, laravel создал новый ... та же ошибка
  • 1
    У меня нет config.vm.synced_folder, потому что я использую hometead, как я могу решить эту проблему?
Показать ещё 4 комментария
90

Никогда не устанавливайте каталог на 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)'

  • 2
    Спасибо! Короче говоря, вы также можете сделать: sudo chown -R {your current user}:www-data storage bootstrap/cache
  • 2
    @RameshPareek Вы правы, но я просто хотел быть более ясным;)
Показать ещё 11 комментариев
87

Иногда нам нужно делать больше, потому что

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
  • 0
    Спасибо, вы поставили меня на правильный путь. посмотри как я решил это в моем ответе
  • 0
    В моем случае chmod не требовался, поскольку он уже был установлен в порядке, однако на Fedora 20 он нуждался в: chown -R apache:apache laravelproject
Показать ещё 3 комментария
23

Вам нужно настроить разрешения 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

10

Запустите следующие команды, и вы можете добавить sudo при запуске команды в зависимости от вашей системы:

chmod -R 775 storage/framework
chmod -R 775 storage/logs
chmod -R 775 bootstrap/cache 
  • 1
    Никогда не используйте 777. С разрешениями 777 вы даете всем, у кого есть подключение, полный доступ к файлам или каталогам с этими разрешениями. Они могут изменять их любым способом по своему усмотрению, в том числе злонамеренно. Многие случаи взлома аккаунтов происходят из 777 разрешений.
  • 0
    хорошо, отредактируйте разрешение до 775
6

Добавить в composer.json

"scripts": {
    ...
    "post-install-cmd": [
          "chgrp -R www-data storage bootstrap/cache",
          "chmod -R ug+rwx storage bootstrap/cache"
        ]
    ...
    }

После composer install

4

Для этой ошибки:

Ошибка в обработчике исключений: не удалось открыть поток или файл "/var/www/laravel/app/storage/logs/laravel.log": не удалось открыть поток: отказано в доступе в /var/www/laravel/bootstrap/compiled.php: 8423

используйте эту команду в терминале:

sudo chmod -R 777 storage
  • 0
    слишком плохо для производственной среды
3

Для всех пользователей 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, но для этого дело даже не требуется.

  • 0
    Хотя эта ссылка может ответить на вопрос, лучше включить здесь основные части ответа и предоставить ссылку для справки. Ответы, содержащие только ссылки, могут стать недействительными в случае изменения связанной страницы. - Из обзора
  • 0
    Ссылка супер-явная, такой механизм не нужен, даже есть раздел специально для контекста Laravel SELinux. Я думаю, что ваше мнение должно быть подкреплено немного большей логикой, чем простым практическим правилом. Тем временем вы отклонили ответ, который, скорее всего, на 99% решит проблемы, не отказываясь от плохих практик, таких как отключение Selinux.
Показать ещё 4 комментария
3

Это также может быть SELinux. (Centos, RedHat)

Определить статус SElinux на терминале:

$ sestatus

Если статус включен, напишите команду для отключения SElinux

$ setenforce Permissive

Спасибо

  • 1
    Это единственное, что сработало, не могли бы вы объяснить, что он делает?
  • 1
    @ hack4mer вы можете прочитать больше информации о seLinux. en.wikipedia.org/wiki/Security-Enhanced_Linux
Показать ещё 1 комментарий
2

попробуй это

  1. CD/VAR/WWW/HTML
  2. Сетенфорс 0
  3. перезапуск службы httpd
  • 0
    Не могли бы вы объяснить, что это делает?
  • 0
    Нет необходимости менять каталоги для использования setenforce но в любом случае неправильно полностью отключать SELinux только для того, чтобы исправить одну проблему с разрешениями.
2

Это решение специально для Laravel 5.5

Вы должны изменить разрешения для нескольких папок: chmod -R -777 хранилище/журналы chmod -R -777 хранилище/каркас для вышеуказанных папок 775 или 765 не работали для моего проекта

chmod -R 775 bootstrap/cache 

Также владение папкой проекта должно быть следующим (текущий пользователь) :( пользователь веб-сервера)

1

Я не был слишком заинтересован в изменении прав доступа к папкам на 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.

0

Вы могли бы сделать:

chcon -R -t httpd_sys_rw_content_t storage
0

Сначала перейдите в проект и щелкните правой кнопкой мыши на хранилище, проверьте свойства и перейдите на вкладку Разрешения

Изображение 3556

Измените разрешения, используя приведенный ниже код

sudo chmod -R 777 storage

Тогда ваши свойства файла могут быть

Изображение 3557

Затем проверьте ваши настройки и выполните команду laravel, она будет работать :)

0

Имел эту проблему и нашел это, и это решило проблему.

Изображение 3558

0

Эту ошибку можно исправить, отключив Linux.

Проверьте, включен ли он

sestatus

Вы пытаетесь..

Сетенфорс 0

  • 1
    "отключив Linux "? Это серьезно заходит слишком далеко :-)!
0

Для пользователей Windows

1: Нажмите "Пуск", введите INetMgr.exe и нажмите "Enter". При появлении запроса нажмите "Продолжить", чтобы повысить свои разрешения.

2: В разделе "Подключения" нажмите кнопку "+" рядом с именем вашего компьютера.

3: В диспетчере IIS дважды щелкните сайт, который вы хотите администрировать.

4: В представлении "Возможности" дважды щелкните "Аутентификация".

5: выберите "Анонимная проверка подлинности", а затем нажмите "Изменить" на панели "Действия".

6: В диалоговом окне "Редактировать анонимные проверки подлинности" щелкните параметр "Специальный пользователь" и нажмите "Установить".

7: В диалоговом окне "Установить учетные данные" введите имя пользователя и пароль, а затем нажмите "ОК".

  • 1
    «Для пользователей Windows», что здесь не так ...
-2

Я столкнулся с той же самой проблемой, и вышеупомянутые ответы не помогли мне в моем случае для той же самой ошибки. Переименование/удаление bootstrap/cache/config.php решило проблему.

-2

Инструменты управления SELinux

работа для моего проекта

semanage fcontext -a -t httpd_sys_rw_content_t '/usr/share/nginx/html/datacenter/storage(/.*)?'
restorecon -Rv '/usr/share/nginx/html/datacenter/'

Ещё вопросы

Сообщество Overcoder
Наверх
Меню