Laravel:file_put_contents()权限被拒绝 - 正确的storage/framework/cache权限?

14

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

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///storage
  • 执行ls -lh /storage/framework/cache返回以下内容:drwsrwsr-x 55 www-data www-data 4.0K Jan 18 20:56 data
  • 现在我只是想知道完整正确的Laravel权限设置和如何恢复该设置。

非常感谢您的帮助!

4个回答

25

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

与Ismoil的答案相反:永远不要将Laravel存储文件夹设置为777。这会造成安全风险。


为什么您不接受答案?是的,您不能这样做,因为这会有风险,但有时您需要修复问题并返回到775。 - Ismoil Shifoev
根据@Ismoil Shifoev的说法,他将权限设置为775而不是777。使用775会有任何潜在风险吗? - SMPLYJR
我遇到了完全相同的问题。真的不确定这里发生了什么。当我从澳大利亚访问一个网站时,我会收到错误提示,但是当我从欧洲访问它时却没有(可能是因为它没有尝试写入相同的缓存文件)。 - PeterT

3

1) 如果您查看cache.php配置文件,您会发现对于文件驱动程序,storage/framework/cache/data文件夹被设置为可写入:

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

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

2) 或者您可以为我运行此命令,它解决了我的问题。

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

谢谢,伊斯莫伊尔。composer dump-autoload 实际上是做什么的? - Thierry Maasdam
它将只重新生成需要包含在项目中的所有类。 - Ismoil Shifoev

1

其实只需要

php artisan cache:clear 

但这只是暂时的,当使用新 IP 或其他方式登录帐户时,仍然会出现问题。

所以尝试使用 chmod 命令:

chmod -R 775 storage

并且

chmod -R 775 storage/*

它解决问题


-1
如果您正在使用Redis,则应设置.env变量。
CACHE_DRIVER=redis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接