Filesystem.php 中的错误异常

ErrorException in 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://laracasts.com/discuss/channels/general-discussion/l5-new-install-error

与托管有关。我的云服务不支持独占锁。我兑换了

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

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

第 74 行 Filesystem.php

更新后

chmod -R gu+w storage

chmod -R guo+w storage

php artisan cache:clear

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

但是我发现这个问题是因为会话被保存到文件中。我从

更改了这个
'driver' => 'file',

'driver' => 'cookie',

/app/config/session.php

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

我在发布我的包中的资产时遇到了这个错误 file_put_contents(): 此流不支持独占锁

这个包有帮助NoLock

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

在我的例子中,我的存储文件夹只包含 logs 文件夹,没有 appframework 文件夹。您需要手动创建这些,所以最后应该有这个结构:

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

别忘了将 storage 文件夹设为可写!

我遇到了同样的问题,重命名或删除

<b>/bootstrap/cache/config.php</b>

文件(文件名)对我有用。

此文件containes/caches与远程服务器冲突的本地服务器配置。

希望这会有所帮助。祝一切顺利。

php artisan config:cache
可以提供帮助,并且可能是比删除 bootstrap/cache/config.php 更好的方法,它对其进行了更新。
如果您的服务器在 docker 容器中工作,请注意,如果您有一个卷要与主机共享并在主机上执行 运行 命令,它会将主机路径放在 config.php 中,但路径不会存在于容器中…
所以连接到容器并 运行 它在里面