У меня есть установка Laravel homestead на локальной машине 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-данным (веб-серверу).
Ошибка в обработчике исключений: поток или файл «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
).
Измените владельца и группу, где ваше имя пользователя:
sudo chown -R yourusername:www-data app/storage
Это рекурсивно ( -R
) устанавливает для пользователя: владельцев групп yourusername:www-data
во всех файлах и папках из app/storage
.
Добавьте разрешение для записи как для вас, так и для группы www-data
:
sudo chmod -R ug+w app/storage
Это рекурсивно ( -R
) добавляет ( +
) флаг записи ( w
) к пользователю ( u
) и группе ( g
), которые владеют файлами и папками из app/storage
.
Кроме того, некоторые полагают, что вам может понадобиться очистить кеш приложения и восстановить файлы автозагрузки Laravel.
php artisan cache:clear php artisan dump-autoload
Наконец, вы можете захотеть восстановить файлы автозагрузки Composer.
composer dump-autoload
Что касается меня, я изменил разрешение на хранение с хранилищем chmod -R 777 storage
и это хорошо работает.
Я проверил эту конфигурацию здесь .
Если изменение прав доступа к файлу, как описано в других ответах, не сработало, и вы используете CentOS 7 или RHEL, тогда проблема может быть защищенной программой selinux. Я боролся со всеми видами разрешений и групп, прежде чем отметить user3670777 ответ на Laravel 4: Не удалось открыть поток: разрешение отклонено
Надеюсь, это поможет другим.
Вы можете сделать это, выполнив следующие шаги.
chmod -R 775 storage
что значит
7 - Owner can write 7 - Group can write 5 - Others cannot write!
Если ваш веб-сервер не работает как Vagrant, он не сможет его написать, поэтому у вас есть 2 варианта:
chmod -R 777 storage
или изменить группу на пользователя веб-сервера, предположив, что это www-данные:
chown -R vagrant:www-data storage
Если все вышеперечисленные предложения не работают, отключите ваш selinux и повторите попытку