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


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

15 57

15 ответов:

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

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

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

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

  1. выйдите из ВМ
  2. С помощью консоли перейдите в синхронизированную папку (vagrant)
  3. $ 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"]

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

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

chmod -R 775 storage/framework
chmod -R 775 storage/logs
chmod -R 775 bootstrap/cache 

это решение специфично для laravel 5.5

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

chmod -R 775 bootstrap/cache 

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

попробуй такое

  1. cd / var / www / html
  2. setenforce 0
  3. перезапуск службы httpd

Я не был слишком заинтересован в изменении моих разрешений папки на 777. Вот как я решил исправить эту проблему.

во-первых, я изменил пользователя, который запускает веб-сервер на моей локальной машине(я запускаю nginx, но принципы применяются везде):

$> sudo vim /etc/nginx/nginx.conf
user <my_user> #inside nginx.conf
service nginx reload

затем я создал еще один под public/ папка, чтобы узнать, кто запускал мою версию php-fpm и где я мог бы изменить это:

<?php
phpinfo();
?>

перезагрузка страницы, I узнал, что 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's reach.

мой проект настроен в моем домашнем каталоге. На Ubuntu 16.04 и Laravel 5.5.

эта ошибка может быть исправлена путем отключения ОС Linux.

проверьте, если он был включен

sestatus

вы попробуйте..

setenforce 0

для всех пользователей 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's like a restart to apply the new rules

наконец, убедитесь, что ваши хосты, IP-адреса и виртуальные хосты все правильно для удаленного доступа.

Selinux предназначен для ограничения доступа даже для пользователей root, поэтому можно получить доступ только к необходимым материалам, по крайней мере, в общем обзоре, это дополнительная безопасность, отключение ее не является хорошей практикой, есть много ссылок для изучения Selinux, но для этот случай даже не требуется.

для пользователей windows

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

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

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

4: в представлении функции дважды щелкните проверка подлинности.

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

6: в диалоговом окне изменение учетных данных анонимной проверки подлинности выберите параметр конкретный пользователь и нажмите кнопку Установить.

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

этот вопрос и это вопрос решаемый.

enter image description here

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

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

определить состояние SElinux на терминале:

$ sestatus

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

$ setenforce Permissive

спасибо

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

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

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