【问题标题】:Laravel: file_put_contents() permission denied — correct storage/framework/cache permissions?Laravel:file_put_contents() 权限被拒绝——正确的存储/框架/缓存权限?
【发布时间】:2019-06-13 09:08:07
【问题描述】:

我在编辑位于storage/framework/cache 的 Laravel 缓存时遇到了困难。我有一个作业正在运行,它保存到某个缓存,但每次作业运行时,都会发生此错误:

ERROR: file_put_contents(/var/www/html/---/storage/framework/cache/data/3c/c7/3cc7fd54b5a3cb08ceb0754f58371cec1196159a): failed to open stream: Permission denied

详情

  • 当我保存到同一个缓存时(例如,使用相同的键,没有错误)
  • 我在 nginx 上运行
  • 我已经在 Laravel 应用程序所在的文件夹中运行了这个命令 sudo chown -R www-data:www-data storage 以及 sudo chmod -R 775 /home/<user>/<laravel folder>/storage
  • 执行ls -lh /storage/framework/cache 将返回以下内容:drwsrwsr-x 55 www-data www-data 4.0K Jan 18 20:56 data
  • 现在我只是想知道完整、正确的 Laravel 权限集是什么以及如何恢复该设置。

感谢任何帮助!提前谢谢你。

【问题讨论】:

    标签: php laravel nginx laravel-5 file-permissions


    【解决方案1】:

    我使用sudo php artisan cache:clear 完全清除了缓存。之后,问题就再也没有发生过。

    反对 Ismoil 的回答:永远不要创建 Laravel 存储文件夹 777。这会带来安全风险。

    【讨论】:

    • 如果对您有帮助。为什么不接受答案?是的,您不能这样做,因为您可以设置 775 。但有时您需要解决问题并返回 775
    • 根据@Ismoil Shifoev 的说法,他将权限设置为 775 而不是 777。775 是否有任何可能的风险?
    • 我遇到了完全相同的问题。真的不知道这里发生了什么。从澳大利亚访问网站时出现错误,但从欧洲访问时却没有(可能是因为它没有尝试写入同一个缓存文件)。
    【解决方案2】:

    1) 如果您查看您的 cache.php 配置文件,您会看到文件驱动程序的 storage/framework/cache/data 文件夹已设置为写入:

    'file' => [
        'driver' => 'file',
        'path' => storage_path('framework/cache/data'),
    ],
    

    这意味着必须正确设置该文件夹的权限,以便网络服务器用户可以成功写入该文件夹。

    2) 或者你可以为我运行这个命令它解决了我的问题

    php artisan cache:clear 
    chmod -R 775 storage/
    composer dump-autoload
    

    【讨论】:

    • 谢谢你,伊斯莫尔。 composer dump-autoload 实际上是做什么的?
    • 它只会重新生成所有需要包含在项目中的类
    猜你喜欢
    • 2016-02-15
    • 2021-12-18
    • 2016-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-31
    相关资源
    最近更新 更多