前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Laravel项目部署后,出现 file_put_contents ()

Laravel项目部署后,出现 file_put_contents ()

作者头像
陈大剩博客
发布2023-03-06 09:03:27
1.6K0
发布2023-03-06 09:03:27
举报
文章被收录于专栏:陈大剩博客专栏

问题: 部署博客,服务器经常500 排查:查看laravel日志file_put_contents () ,failed to open stream: No such file or directory;

报错提示
报错提示

出现几率为偶尔性,不常出现;

结合百度搜索,猜测可能出现的原因:

  • storage 目录权限问题【已赋予:storage、bootstrap/cache文件夹 777权限,还是会报错】
  • inode 耗尽 【inode 足够,使用不到 10%】
  • 磁盘空间不够 【硬盘空间足够】
  • 服务器不支持共享锁 【参见阿里云 部分服务器不支持共享锁 ,file_put_contents (path, contents,
  • 缓存问题。 执行了 php artisan cache:clear
  • log 文件日志过大问题。【log 文件不到 4KB】
  • 目录不存在问题。【查看 /storage/framework/cache/data/61/66/61662d13be54459cafad9d52f19137b34a4d42c9 目录及文件存在, 查看目录及文件生成时间 和 laravel 报错时间一致, 精确到秒】

按照上述步骤解决后,还是会偶尔性出现; 于是便查看storage/logs文件,看到log文件属于 root 权限; 为什么是log会是 root 创建的,而不是 www 创建的??? 明明用chmod给过权限,为什么是log会是 root 创建的

发现问题根源 经过筛查,原来

  • 在项目文件夹中有些文件权限不是www,而是root权限(storage/logs/laravel.log文件不是www权限而是root权限,可用ll命令查看当前目录下文件的权限)
  • 执行 crontab 的命令,在定时器中有报错,所以在定时器中生成了日志,故权限为 root
  • 是在root用户下执行命令,文件相关权限就会变成root(包括git、php artisan 、mkdir 、touch等);
如何修复

排查是什么文件引起的,可以在项目目录中查看当前目录下文件的权限(重点看storage文件夹下的相关文件)

代码语言:javascript
复制
#当前目录下文件的权限
ll

查找出为什么文件会是 root 创建的原因(我这里是因为 crontab 的命令的问题)

让日志文件,在定时任务中不要以 root 的形式执行

代码语言:javascript
复制
crontab -u www -e ;

执行完命令后执行,把所有者改为 www

代码语言:javascript
复制
chown -R www:www * .*  

2022年更新

如果你的项目是刚刚部署,出现这个状态且都不是上面的问题; 那么你可以打开项目下 storage/framework/cache/data 文件夹看是否权限为 664 ; 如果是 644 则直接修改 config/cache.php

代码语言:javascript
复制
...
'file' => [
    'driver' => 'file',
    'path' => storage_path('framework/cache/data'),
    'permission' => 0664,
],
// 将 0664 改为 0775
'file' => [
    'driver' => 'file',
    'path' => storage_path('framework/cache/data'),
    'permission' => 0775,
],
...

最后一定记得运行命令

代码语言:javascript
复制
php artisan config:cache
php artisan cache:clear 

问题总结

Laravel 在使用 Cache 时使用了 file 类型,然后 file 使用的是 0664 导致 www 用户无法执行 Cache 下的文件。

当然你可以可以将 Cache 类型换成:RedisMemcached

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-04-22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 如何修复
  • 2022年更新
  • 问题总结
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档