宝哥软件园

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

编辑:宝哥软件园 来源:互联网 时间:2021-09-07

发现问题

在Laravel项目中,如果通过执行php artisan config:cache命令缓存配置文件,则在Tinker中env函数读取的环境变量的值为null(Tinker是Laravel的一个交互命令行接口),只有在执行php artisan config:clear清除配置缓存后才能读取。为什么呢?

确切地发现

打开。env文件,并看到这些都很有价值:

APP _ ENV=local APP _ KEY=base 64: jhee5 bokrg 283 ut0n 1 zq/ggvgeer 8 ooyib 42/Wiccyvo=APP _ debug=truapp _ log _ level=debug APP _ URL=http://www . tanteng . medb _ connection=mysqldb _ host=127 . 0 . 0 . 1 db _ port=3306 db _ database=tanteng . medb _ username=homesteaddb

原因何在?

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

让我们看看这个代码,照亮/基础/引导/检测环境。

公共函数引导(Application $app){ if(!$ app-configurationiscache()){ $ this-checkForSpecificEnvironmentFile($ app);尝试{(new Dotenv($ app-environmentPath(),$ app-environment file()))-load();} catch(invalidatexception $ e){//} }此方法将在框架启动后运行。这段代码显示,如果有缓存配置文件,将不会设置环境变量,配置将读取缓存配置文件,而不是环境变量。

因此,在配置文件下的其他地方,即app/config目录下,读取配置时不使用env函数读取环境变量,这样一旦执行php artisan config:cache,env函数就无法工作。所有要使用的环境变量都是由app/config目录的配置文件中的env读取,其他地方要使用的所有环境变量都是统一从配置文件中读取,而不是使用env函数。

摘要

以上就是本文的全部内容。希望这篇文章的内容对你的学习或工作有所帮助。有问题可以留言交流。

更多资讯
游戏推荐
更多+