会话存储问题
会话存储无法使用我的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
答案 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
文件夹而没有app
和framework
个文件夹。您需要手动创建这些,因此您应该在最后使用此结构:
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 中,而容器中不存在的路径...
所以连接到容器并在里面运行它