Filesystem.php中的ErrorException

Ped*_*sel 16 php session laravel laravel-5

会话存储问题

会话存储无法使用我的Laravel 5.使用它一个月没有问题.但自从最新上传到Web服务器后,我在每个页面上得到以下响应.

ErrorException in Filesystem.php line 74:
file_put_contents(): Exclusive locks are not supported for this stream
Run Code Online (Sandbox Code Playgroud)

互联网上的许多帖子都表示要删除对它的引用

$lock on line 74 in Filesystem.php
Run Code Online (Sandbox Code Playgroud)

似乎是一个快速修复,将导致其他问题...

我该如何处理根本原因?

参考

/sf/ask/2031676391/ https://laracasts.com/discuss/channels/general -discussion/L5-新安装错误

mal*_*eeb 58

更新后做

chmod -R gu+w storage

chmod -R guo+w storage

php artisan cache:clear
Run Code Online (Sandbox Code Playgroud)


pau*_*dru 17

如果您使用Laravel 5.2.0,您可能忽略了storage文件中的.gitignore文件夹.问题是,当您composer install在服务器上运行时,不会创建存储文件夹中的所有文件,您应该检查这些文件!

在我的情况下,我的存储文件夹只包含logs没有appframework文件夹的文件夹.您需要手动创建这些,因此您应该在最后使用此结构:

storage
  - app
  - framework
    - cache 
    - sessions
    - views
  - logs
Run Code Online (Sandbox Code Playgroud)

别忘了让storage文件夹可写!

  • 一条信息,很难找到! (2认同)

Ped*_*sel 6

与托管有关。我的云服务不支持排他锁。我交换了

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

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

在 Filesystem.php 的第 74 行


sha*_*nSK 5

谢谢@peder-wessel。您的答案是原因解释,但不是永久解决方案,并且将一直有效,直到我们再次更新供应商,因为 Filesystem.php 文件位于 Laravel 供应商目录中。有一天,当我们这样做时,composer update它会再次引起问题。:(

但是我发现这个问题是因为会话被保存到文件而引起的。我把这个从

'driver' => 'file',
Run Code Online (Sandbox Code Playgroud)

'driver' => 'cookie',
Run Code Online (Sandbox Code Playgroud)

/app/config/session.php中

也许 Laravel 创建者也应该将其添加到配置中,因为并非所有(共享)托管都提供独占锁定权限