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