探究Laravel使用env函数读取环境变量为null的问题


Posted in PHP onDecember 06, 2016

发现问题

在 Laravel 项目中,如果执行了 php artisan config:cache 命令把配置文件缓存起来后,在 Tinker 中(Tinker 是 Laravel 自带的一个交互式命令行界面),使用 env 函数读取环境变量的值为 null,只有执行 php artisan config:clear 清除配置缓存后就可以读取了,这是为什么呢?

一探究竟

打开 .env 文件看,这些都是有值的:

APP_ENV=local
APP_KEY=base64:JHE5bOkRg283uT0n1Zq/GgvGEer8ooYiB42/wIcCyvo=
APP_DEBUG=true
APP_LOG_LEVEL=debug
APP_URL=http://www.tanteng.me
 
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=tanteng.me
DB_USERNAME=homestead
DB_PASSWORD=secret

如图所示:

探究Laravel使用env函数读取环境变量为null的问题

原因何在?

在 Laravel 中,如果执行 php aritisan config:cache 命令,Laravel 将会把 app/config 目录下的所有配置文件“编译”整合成一个缓存配置文件到  bootstrap/cache/config.php,每个配置文件都可以通过 env 函数读取环境变量,这里是可以读取的。但是一旦有了这个缓存配置文件,在其他地方使用 env 函数是读取不到环境变量的,所以返回 null.

让我们看看这段代码,Illuminate/Foundation/Bootstrap/DetectEnvironment.php line 18

public function bootstrap(Application $app)
{
 if (! $app->configurationIsCached()) {
 $this->checkForSpecificEnvironmentFile($app);
 
 try {
  (new Dotenv($app->environmentPath(), $app->environmentFile()))->load();
 } catch (InvalidPathException $e) {
  //
 }
 }
}

这个方法在框架启动后就会运行,这段代码说明了如果存在缓存配置文件,就不会去设置环境变量了,配置都读缓存配置文件,而不会再读环境变量了。

因此,在配置文件即 app/config 目录下的其他地方,读取配置不要使用 env 函数去读环境变量,这样你一旦执行 php artisan config:cache 之后,env 函数就不起作用了。所有要用到的环境变量,在 app/config 目录的配置文件中通过 env 读取,其他地方要用到环境变量的都统一读配置文件而不是使用 env 函数读取。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

PHP 相关文章推荐
用php将任何格式视频转为flv的代码
Sep 03 PHP
PHP采集腾讯微博的实现代码
Jan 19 PHP
php中导出数据到excel时数字变为科学计数的解决方法
Feb 03 PHP
php正则表达式使用的详细介绍
Apr 27 PHP
PHP 使用pcntl和libevent 实现Timer功能
Oct 27 PHP
php根据isbn书号查询amazon网站上的图书信息的示例
Feb 13 PHP
PHP轻量级数据库操作类Medoo增加、删除、修改、查询例子
Jul 04 PHP
php上传图片之时间戳命名(保存路径)
Aug 15 PHP
php获取用户浏览器版本的方法
Jan 03 PHP
PHP实现的支付宝支付功能示例
Mar 26 PHP
PHP 枚举类型的管理与设计知识点总结
Feb 13 PHP
php 输出缓冲 Output Control用法实例详解
Mar 03 PHP
thinkphp中AJAX返回ajaxReturn()方法分析
Dec 06 #PHP
php中引用符号(&)的使用详细介绍
Dec 06 #PHP
thinkPHP简单实现多个子查询语句的方法
Dec 05 #PHP
thinkPHP自动验证机制详解
Dec 05 #PHP
thinkPHP中_initialize方法实例分析
Dec 05 #PHP
php版微信自定义回复功能示例
Dec 05 #PHP
thinkPHP中配置的读取与C方法详解
Dec 05 #PHP
You might like
php 清除网页病毒的方法
2008/12/05 PHP
PHP中空字符串介绍0、null、empty和false之间的关系
2012/09/25 PHP
在Linux系统下一键重新安装WordPress的脚本示例
2015/06/30 PHP
详解WordPress中用于合成数组的wp_parse_args()函数
2015/12/18 PHP
PHP中时间加减函数strtotime用法分析
2017/04/26 PHP
javascript firefox不显示本地预览图片问题的解决方法
2008/11/12 Javascript
javascript 贪吃蛇实现代码
2008/11/22 Javascript
使用jQuery动态加载js脚本文件的方法
2014/04/03 Javascript
js正则匹配出所有图片及图片地址src的方法
2015/06/08 Javascript
node.js实现端口转发
2016/04/14 Javascript
jquery 抽奖小程序实现代码
2016/10/12 Javascript
JS实现淡入淡出图片效果的方法分析
2016/12/20 Javascript
详解bootstrap用dropdown-menu实现上下文菜单
2017/09/22 Javascript
在小程序中集成redux/immutable/thunk第三方库的方法
2018/08/12 Javascript
微信小程序实现原生步骤条
2019/07/25 Javascript
JavaScript实现打砖块游戏
2020/02/25 Javascript
js中调用微信的扫描二维码功能的实现代码
2020/04/11 Javascript
详解element-ui 表单校验 Rules 配置 常用黑科技
2020/07/11 Javascript
Element-ui树形控件el-tree自定义增删改和局部刷新及懒加载操作
2020/08/31 Javascript
[03:02]2020完美世界城市挑战赛(秋季赛)总决赛回顾
2021/03/11 DOTA
python黑魔法之参数传递
2016/02/12 Python
Python cx_freeze打包工具处理问题思路及解决办法
2016/02/13 Python
python 时间戳与格式化时间的转化实现代码
2016/03/23 Python
由浅入深讲解python中的yield与generator
2017/04/05 Python
node.js获取参数的常用方法(总结)
2017/05/29 Python
Python视频爬虫实现下载头条视频功能示例
2018/05/07 Python
python3中property使用方法详解
2019/04/23 Python
通过python改变图片特定区域的颜色详解
2019/07/15 Python
Python中return函数返回值实例用法
2020/11/19 Python
美国女性卫生用品公司:Thinx
2017/06/30 全球购物
台湾母婴用品购物网站:Infant婴之房
2018/06/15 全球购物
给老师的道歉信
2014/01/11 职场文书
2015年世界环境日活动总结
2015/02/11 职场文书
关于清明节的演讲稿2015
2015/03/18 职场文书
HTML5简单实现添加背景音乐的几种方法
2021/05/12 HTML / CSS
js中Object.create实例用法详解
2021/10/05 Javascript