Laravel中的.env文件偶发性读取不到,env()获取为空最后取了config默认的值终极解决方案

Laravel中的.env文件偶发性读取不到,env()获取为空最后取了config默认的值终极解决方案


1.背景

用Laravel框架开发项目,上线后打开APP运行一段时间后会莫名的自动退出登录(前端有自动轮询请求接口),经过排查发现session的key中途会被重置成服务上另一个项目的session_key,这篇博文有相关.env串库说明:https://blog.csdn.net/u010785091/article/details/88715800。后面我把.env里的键添加加个前缀后,退出的频率是降低了,但是没有彻底杜绝。后面发现session_key中途还是会被重置成config中的默认session_key,此时的心情,此处省略一万字......

 

2.原因

经过咨询Laravel大佬,因为我也是第一次使用这个框架,他们也遇到过该问题,Laravel的确存在偶尔读不到.env并返回空就使用了config中默认值,所以导致用了错误的配置信息连接Redis和数据库失败,继续导致程序无法从Redis中读取session值,因此登录信息就没法拿到了。至于Laravel为什么会存在整个情况,暂不知道情况,如有知道的欢迎在评论留言。

 

3.解决办法

其实Laravel官方有相关的正确使用.env的姿势,正确姿势是把.env编译到缓存中,这样就不用每次请求都文件读取,一旦缓存了配置以后,就不会再从 .env 文件加载内容了。这样做是有道理的,毕竟 .env 文件是文本内容,解析它的成本还是挺高的,所以生产环境最优雅的方式一定要编译到缓存中。

  • 每次修改env后清楚缓存
php artisan config:clear 
  •  编译生成缓存配置
php artisan config:cache
  • 缓存配置的位置

Laravel中的.env文件偶发性读取不到,env()获取为空最后取了config默认的值终极解决方案_第1张图片

 

最后

通过以上方式,就可以完全避免读不到.env文件的问题了,导致一些莫名其妙的bug了,但是要注意,最优雅的方式env()方法不要在业务代码中使用,只在配置文件中使用。

 

 

 

你可能感兴趣的:(PHP深入实践,Laravel,.env,读取不到,配置,配置缓存)