laravelenv-master下的 .env.example 怎么改成.env

版权声明:本文为博主原创文章,未经博主允许不得转载。 /qq_/article/details/

根据不同环境服务器设置系统变量(可根据phpinfo()查看APP_ENV环境变量是否OK):

这样,项目根目录下就会有根据不同环境对应的.env.xxx文件,放入版本控制,本地的环境对应.env不需要放入版本控制。

原理可看laravel的源码:

昨天同事在他的项目中遇到了一个技术难题让我协助解决

据他反映,之前本地开发时功能都是正常的,上线之后才开始出现的问题

// 此处省略部分代码

可以发现,实际上调用的就是php自带的getenv函数,如果取不到值,那必定是某段执行putenv或者操作$_ENV全局变量的代码没有执行,而且这些环境变量设置操作一定是在初始化的时候进行的

在代码中,我们并没有发现任何执行putenv或者操作$_ENV全局变量的地方,实际上在整个Laravel的框架代码里也没有发现蛛丝马迹,那么这些环境变量是如何保存进来的呢?

如果Laravel框架里没有执行这些代码,我们应该可以推测是框架使用的第三方组件做了这些事情

Laravel那一套.env文件的玩法就是使用的这个组件,有兴趣的同学可以研究一下

好了,暂时总结一下分析的结果

  • 环境变量的存储经过确认是第三方的 来完成的

那么env获取不到值只能说明Dotenv的实例化并没有执行

而这个方法的作用就是判断 bootstrap/cache/config.php 缓存文件是否存在,如果文件存在则不会执行Dotenv的实例化操作,也就不会往$_ENV里存数据,自然env函数是取不到值的

这是对config目录下的所有配置文件做的缓存

那么,真相大白了,之前在开发时并没有出现问题,是因为没有执行 config:cache 命令,而项目上线后为了优化访问速度,生成了缓存文件,导致env取值失败

可以疑问还是存在,既然Laravel提供了env函数,为什么还有这个坑呢?是bug吗?如果env不能使用,那该使用什么方式呢?

本着一探究竟的态度,仔细阅读了文档,在 里找到了答案

如果使用了config:cache,env函数只能在config目录下的配置文件的php里使用,不可以在其他地方使用。

一个非常简单的办法就是将

所有的 Lumen 框架的配置信息都存储在 .env 文件中。

你可以使用 config 辅助函数获取你的设置值,设置值可以通过「点」语法来获取,其中包含了文件与选项的名称。你也可以指定一个默认值,当该设置选项不存在时就会返回默认值:

若要在运行期间修改设置值,请传递一个数组至 config 辅助函数:

应用程序常常需要根据不同的运行环境设置不同的值。例如,你会希望在本机开发环境上有与正式环境不同的缓存驱动。只需通过配置文件就可轻松完成。

Lumen,这个文件将自动被更名为 .env,否则你只能手动更改文件名。

当你的应用程序收到请求时,这个文件所有的变量都会被加载到 PHP 超级全局变量 $_ENV 里。你可以使用辅助函数 env 来获取这些变量的值:

env 的第二个参数是备用数据,如果 APP_DEBUG 未设置的话,true 就会被当做备用数据返回。

根据本机服务器或者正式环境的需求的不同,可自由修改环境变量。但是,.env 文件不应该被提交到应用程序的版本控制系统,因为每个开发人员或服务器在使用应用程序时,可能需要不同的环境配置。

如果你是某个团队的开发者,建议将 .env.example 文件放进你的应用程序。通过样本配置文件里的预设值,你团队中的其他开发人员就可以清楚地知道,在运行你的应用程序时有哪些环境变量是必须有的。

获取目前应用程序的环境

应用程序的当前环境是由 .env 文件中的 APP_ENV 变量所决定的。你可以通过应用程序实例的 environment 方法来获取该值:

你也可以传递参数至 environment 方法来确认当前环境是否与参数相符合:

我要回帖

更多关于 laravelenv 的文章

 

随机推荐