Ответ 1
Вам нужно выполнить одно из следующих действий:
-
sudo chmod -R 644 app/storage
-
sudo chmod -R 755 app/storage
У меня есть домашняя усадьба 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
не существует, но я предполагаю, что это то, что должно быть создано автоматически?
Вам нужно выполнить одно из следующих действий:
sudo chmod -R 644 app/storage
sudo chmod -R 755 app/storage
Все файлы и папки в 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 должны иметь разрешение на запись.
Чтобы убедиться, что файлы и папки имеют правильные разрешения:
Перейдите в корень вашей установки Laravel (где живут composer.json
и artisan
).
Изменение владеющую пользователя и группу, где yourusername
это ваше имя пользователя:
sudo chown -R yourusername:www-data app/storage
Это рекурсивно (-R
) устанавливает владельцев user: group на yourusername:www-data
во всех файлах и папках, начиная с app/storage
далее.
Добавьте разрешение на запись для вас и группы www-data
:
sudo chmod -R ug+w app/storage
Это рекурсивно (-R
) добавляет (+
) флаг записи (w
) к пользователю (u
) и группе (g
), которым принадлежат файлы и папки из app/storage
далее.
Кроме того, некоторые предполагают, что вам может потребоваться очистить кэш приложения.
php artisan cache:clear
Наконец, вы можете восстановить файлы автозагрузки Composer.
composer dump-autoload
Что касается меня, я изменил разрешение на хранение с помощью chmod -R 777 storage
, и он работает хорошо.
Я проверил эту конфигурацию на здесь.
Вы можете сделать это, выполнив следующие шаги:
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
Если изменение прав доступа к файлу, как описано в других ответах, не сработало, и вы используете CentOS 7 или RHEL, тогда проблема может быть программой безопасности, называемой selinux. Я боролся со всеми типами разрешений и групп, прежде чем отметить user3670777 ответ на Laravel 4: Не удалось открыть поток: разрешение отклонено
Надеюсь, что это поможет другим.
Я новичок в Laravel. Может быть, я не мог объяснить это подробно, но эта команда исправила мою проблему.
chmod -R 777 storage/
Если все вышеперечисленные предложения не работают, отключите ваш selinux и повторите попытку