Laravel:file_put_contents() 权限被拒绝——正确的存储/框架/缓存权限?
Posted
技术标签:
【中文标题】Laravel:file_put_contents() 权限被拒绝——正确的存储/框架/缓存权限?【英文标题】:Laravel: file_put_contents() permission denied — correct storage/framework/cache permissions? 【发布时间】: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 权限集是什么以及如何恢复该设置。
感谢任何帮助!提前谢谢你。
【问题讨论】:
【参考方案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
实际上是做什么的?
它只会重新生成所有需要包含在项目中的类以上是关于Laravel:file_put_contents() 权限被拒绝——正确的存储/框架/缓存权限?的主要内容,如果未能解决你的问题,请参考以下文章
Laravel:file_put_contents() 无法打开流:会话文件夹的权限被拒绝
Laravel blade模板生成静态化file_put_contents方法
file_put_contents 不适用于 json laravel 和 php
Laravel 5.5:Storage::put,file_put_contents 错误:无法打开流:没有这样的文件或目录
Laravel 5 显示 ErrorException file_put_contents 无法打开流:没有这样的文件或目录