Laravel 解决使用 env 读取环境变量为 null 的问题

这段时间,负责了线上服务器的一些工作,包括服务器性能优化以及线上错误处理等任务。公司使用的框架是Laravel,性能着实比Yii,ThinkPHP差了一点,所以要对该框架来进行优化。参考了这篇文章:Laravel 程序优化 。这一优化,出现了一点小问题:移动端同事反馈说,公司的一个抽奖地址跳到测试地址上去了,没有走正式环境的链接地址。顿时,菊花一紧。。。。。

看了下对应抽奖的程序代码,发现应该是走了错误的配置。需要说明的是,对于测试环境和正式环境的判断,有同事采用的是这种方案:

 env('APP_ENV', 'test') == 'test' ? 'test' : 'online';

通过判断是测试环境还是线上环境,走不同的配置,返回不同的参数地址。好吧,在测试环境上,这种判断也没问题,线上环境,以前也确实没问题。但是我在线上环境,执行了配置信息缓存后,就出现这个问题了:

php artisan config:cache

在测试环境中,打印环境判断,确实是test,线上环境,env获取的环境变量值为null,造成最终得到的值是test!所以走的也是测试环境的配置!当去掉这个缓存配置后,线上环境就正常了。说明,env读取变量值,受到信息配置缓存操作的影响。那就不做信息配置缓存优化了?当然不是!我的想法是,既然env读取不了,那应该还有其他方法来处理这样的问题。经过查看文档,找到了如下方法:

app()->environment()

通过这个,来获取当前环境。这样对应的问题就解决了。当然,config()方法也是可以的。这里就不做赘续了。

Sea Bridge

古之立大志者,不惟有超世之才 亦必有坚韧不拔之志!

发表评论