Проблема с хранилищем сеансов
Хранилище сеансов, не работающее с моим Laravel 5. Используется в течение месяца без проблем. Но с момента последней загрузки на веб-сервер я получаю следующий ответ на каждой странице.
ErrorException in Filesystem.php line 74: file_put_contents(): Exclusive locks are not supported for this stream
Многие сообщения в Интернете указывают на удаление ссылки на
$lock on line 74 in Filesystem.php
Похоже на быстрое исправление, которое приведет к другим проблемам в будущем …
Как я могу позаботиться о первопричине?
Рекомендации
https://stackoverflow.com/questions/29023948/laravel-5-file-put-contents-exclusive-locks-are-not-supported-for-this-stre https://laracasts.com/discuss/channels/general -discussion / l5-новая установка ошибки
после обновления
chmod -R gu+w storage chmod -R guo+w storage php artisan cache:clear
Если вы используете Laravel 5.2.0, вы, вероятно, проигнорировали папку storage
в файле .gitignore
. Дело в том, что когда вы запускаете composer install
на своем сервере, не все файлы из папки хранилища создаются, вы должны их проверить!
В моем случае папка хранилища содержала только папку logs
без папок app
и фреймов. Вам необходимо создать их вручную, чтобы в конце появилась такая структура:
storage - app - framework - cache - sessions - views - logs
Не забудьте сделать папку storage
доступной для записи!
спасибо @ peder-wessel. Ваш ответ объясняет причину, но не является постоянным решением и будет работать, пока мы не обновим поставщиков снова, поскольку файл Filesystem.php находится в каталоге поставщика Laravel. Однажды, когда мы composer update
это снова вызовет проблему. 🙁
Однако мне удалось выяснить, что эта проблема вызвана тем, что сеанс сохраняется в файле. Я изменил это из
'driver' => 'file',
в
'driver' => 'cookie',
в /app/config/session.php
Возможно, создатели laravel также должны добавить это в конфигурацию, поскольку не все (общие) хостинги предоставляют исключительные права блокировки
Это было связано с хостингом. Мой облачный сервис не поддерживал эксклюзивные блокировки. Я обменялся
return file_put_contents($path, $contents, $lock ? LOCK_EX : 0);
в
return file_put_contents($path, $contents, $lock ? LOCK_SH : 0);
в строке 74 файла Filesystem.php
У меня возникла проблема с публикацией моих активов из моего пакета с этой ошибкой file_put_contents (): Исключительные блокировки не поддерживаются для этого потока
этот пакет помогает NoLock