Filesystem.php中的ErrorException

时间:2015-03-20 15:14:17

标签: php laravel session laravel-5

会话存储问题

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

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-new-install-error

7 个答案:

答案 0 :(得分:54)

更新后

chmod -R gu+w storage

chmod -R guo+w storage

php artisan cache:clear

答案 1 :(得分:17)

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

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

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

不要忘记让storage文件夹可写!

答案 2 :(得分:4)

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

但是我能够发现这个问题是由于Session被保存到文件引起的。我改变了这个

'driver' => 'file',

'driver' => 'cookie',
/app/config/session.php

中的

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

答案 3 :(得分:3)

与主持人有关。我的云服务不支持独占锁。我交换了

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

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

在Filesystem.php的第74行

答案 4 :(得分:2)

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

run_language_modeling.py

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

此文件包含/缓存与远程服务器冲突的本地服务器配置。

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

答案 5 :(得分:0)

我在使用此错误从包中发布资产时出现问题 file_put_contents():此流

不支持独占锁

这个包有助于NoLock

答案 6 :(得分:0)

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