ОшибкаException в Filesystem.php

Проблема с хранилищем сеансов

Хранилище сеансов, не работающее с моим 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/info/29023948/laravel-5-file-put-contents-exclusive-locks-are-not-supported-for-this-stre https://laracasts.com/discuss/channels/general -discussion/l5-новая установка ошибки

Ответы

Ответ 1

после обновления

chmod -R gu+w storage

chmod -R guo+w storage

php artisan cache:clear

Ответ 2

Если вы используете Laravel 5.2.0, вы, вероятно, проигнорировали папку storage в файле .gitignore. Дело в том, что когда вы запускаете composer install на своем сервере, не все файлы из папки хранилища создаются, вы должны их проверить!

В моем случае моя папка хранения содержит только logs папку без app и framework папок. Вам необходимо создать их вручную, чтобы в конце появилась такая структура:

storage
  - app
  - framework
    - cache 
    - sessions
    - views
  - logs

Не забудьте сделать папку storage доступной для записи!

Ответ 3

спасибо @peder-wessel. Ваш ответ объясняет причину, но не является постоянным решением и будет работать, пока мы не обновим поставщиков снова, поскольку файл Filesystem.php находится в каталоге поставщика Laravel. Однажды, когда мы composer update это снова вызовет проблему. :(

Однако мне удалось выяснить, что эта проблема вызвана тем, что сеанс сохраняется в файле. Я изменил это из

'driver' => 'file',

в

'driver' => 'cookie',

в /app/config/session.php

Возможно, создатели laravel также должны добавить это в конфигурацию, поскольку не все (общие) хостинги предоставляют исключительные права блокировки

Ответ 4

Это было связано с хостингом. Мой облачный сервис не поддерживал эксклюзивные блокировки. Я обменялся

return file_put_contents($path, $contents, $lock? LOCK_EX: 0);

в

return file_put_contents($path, $contents, $lock? LOCK_SH: 0);

в строке 74 файла Filesystem.php

Ответ 5

У меня возникла проблема с публикацией моих активов из моего пакета с этой ошибкой file_put_contents(): Исключительные блокировки не поддерживаются для этого потока

этот пакет помогает NoLock