"laravel.log" не открывается: не удалось открыть поток

У меня есть домашняя усадьба Laravel на локальной машине OSX, все, казалось, идет гладко, пока я не попытался открыть example.app:8000 и получил эту ошибку:

Error in exception handler: The stream or file "/home/vagrant/Code/example/app/storage/logs/laravel.log" could not be opened: failed to open stream: Protocol error in /home/vagrant/Code/example/bootstrap/compiled.php:8671

Я следил за документами Laravel, а также с Laracast о создании усадьбы, поэтому я не уверен, что бы это вызвало. Я вижу, что /home/vagrant/Code/example/app/storage/logs/laravel.log не существует, но я предполагаю, что это то, что должно быть создано автоматически?

Ответ 1

Вам нужно выполнить одно из следующих действий:

  • sudo chmod -R 644 app/storage
  • sudo chmod -R 755 app/storage

Ответ 2

Все файлы и папки в app/storage должны быть доступны для записи вами и группой www-data (веб-сервер).

Ошибка в обработчике исключений: не удалось открыть поток или файл "laravel/app/storage/logs/laravel.log": не удалось открыть поток: в laravel/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler отказано в доступе .php: 77

Если вы получаете эту ошибку (или аналогичную ошибку) в браузере при доступе к вашему сайту, тогда группа www-data не сможет записать в app/storage. Если вы получите эту ошибку при выполнении определенных команд php artisan, то вы (пользователь) не сможете записать в app/storage. Поэтому и вы, и группа www-data должны иметь разрешение на запись.


Чтобы убедиться, что файлы и папки имеют правильные разрешения:

  1. Перейдите в корень вашей установки Laravel (где живут composer.json и artisan).

  2. Изменение владеющую пользователя и группу, где yourusername это ваше имя пользователя:

    sudo chown -R yourusername:www-data app/storage
    

    Это рекурсивно (-R) устанавливает владельцев user: group на yourusername:www-data во всех файлах и папках, начиная с app/storage далее.

  3. Добавьте разрешение на запись для вас и группы www-data:

    sudo chmod -R ug+w app/storage
    

    Это рекурсивно (-R) добавляет (+) флаг записи (w) к пользователю (u) и группе (g), которым принадлежат файлы и папки из app/storage далее.

  4. Кроме того, некоторые предполагают, что вам может потребоваться очистить кэш приложения.

    php artisan cache:clear
    
  5. Наконец, вы можете восстановить файлы автозагрузки Composer.

    composer dump-autoload
    

Ответ 3

Что касается меня, я изменил разрешение на хранение с помощью chmod -R 777 storage, и он работает хорошо.

Я проверил эту конфигурацию на здесь.

Ответ 4

Вы можете сделать это, выполнив следующие шаги:

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

Ответ 5

Если изменение прав доступа к файлу, как описано в других ответах, не сработало, и вы используете CentOS 7 или RHEL, тогда проблема может быть программой безопасности, называемой selinux. Я боролся со всеми типами разрешений и групп, прежде чем отметить user3670777 ответ на Laravel 4: Не удалось открыть поток: разрешение отклонено

Надеюсь, что это поможет другим.

Ответ 6

Я новичок в Laravel. Может быть, я не мог объяснить это подробно, но эта команда исправила мою проблему.

chmod -R 777 storage/

Ответ 7

Если все вышеперечисленные предложения не работают, отключите ваш selinux и повторите попытку