【问题标题】:ErrorException in Filesystem.phpFilesystem.php 中的 ErrorException
【发布时间】:2015-05-24 01:27:37
【问题描述】:

会话存储问题

会话存储不适用于我的 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://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

【问题讨论】:

  • 等等,您将会话数据放在云文件系统上?坏主意。
  • 我今天在使用 4.2 时遇到了这个问题,并且您的快速修复已经奏效。同样,它以前可以工作,但是今天上传导致了这个问题。我很确定这是因为最近的(错误的)Laravel 更新,因为我在上周做了composer update

标签: php laravel session laravel-5


【解决方案1】:

更新后做

chmod -R gu+w storage

chmod -R guo+w storage

php artisan cache:clear

【讨论】:

  • @maleeb 你只需要运行一个“chmod”命令:chmod -R a+w storage。您将在第二个命令中覆盖组和用户的“写入”权限。它是多余的。
【解决方案2】:

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

在我的情况下,我的存储文件夹仅包含 logs 文件夹,没有 appframework 文件夹。您需要手动创建它们,所以最后应该有这个结构:

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

别忘了让storage 文件夹可写!

【讨论】:

    【解决方案3】:

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

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

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

    在 Filesystem.php 的第 74 行

    【讨论】:

    • 很好的解决方案。谢谢!我交换了 return file_put_contents($path, $contents, $lock ? LOCK_EX : 0); with return file_put_contents($path, $contents, $lock ? LOCK_SH : 0); Filesystem.php 的第 74 行就像一个魅力。
    • 这样做安全吗?
    【解决方案4】:

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

    但是我发现这个问题是由于 Session 被保存到文件而引起的。我把这个从

    'driver' => 'file',
    

    'driver' => 'cookie',
    

    /app/config/session.php

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

    【讨论】:

      【解决方案5】:

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

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

      文件(文件名)正在为我工​​作。

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

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

      【讨论】:

        【解决方案6】:

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

        这个包帮助NoLock

        【讨论】:

          【解决方案7】:

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

          【讨论】:

            猜你喜欢
            • 2017-03-28
            • 2019-07-11
            • 2017-10-12
            • 1970-01-01
            • 2017-10-29
            • 1970-01-01
            • 1970-01-01
            • 2017-10-23
            • 2019-10-17
            相关资源
            最近更新 更多