又一个获取.env文件配置的库 浏览次数:247 日期:2020-08-13 22:21:00 ### 前言 有一个星期没有给大家做分享了,今天要分享的是一个加载.env文件配置的库,这是出自symfony框架的一款库,[symfony/dotenv](https://github.com/symfony/dotenv)。不知道大家有没有看过之前我的博文,关于[vlucas/phpdotenv](https://github.com/vlucas/phpdotenv)的,他们的作用是一样的,都是加载.env中的配置项。 ### 安装 ```php composer require symfony/dotenv ``` ### 实例代码 ```php load(__DIR__.'/.env'); var_dump($_SERVER['DB_NAME'],$_ENV['DB_NAME'],getenv('DB_NAME')); ``` ### 说明 这个库的作用是解析.env文件的配置变量到$_SERVER、$_ENV。 - load() 解析配置到$_SERVER、$_ENV,如果配置在$_SERVER、$_ENV已经存在,则不会覆盖。 ```shell //.env内容 DB_NAME=localhost ``` ```php $_SERVER['DB_NAME'] = 'test';//模拟$_SERVER已经存在的变量 $dotenv->load(__DIR__.'/.env'); var_dump($_SERVER['DB_NAME']);//输出string(4) "test" ``` - overload() 解析配置到$_SERVER、$_ENV,如果配置在$_SERVER、$_ENV已经存在,则会进行覆盖。 ```php $_SERVER['DB_NAME'] = 'test'; $dotenv->overload(__DIR__.'/.env'); var_dump($_SERVER['DB_NAME']);//输出string(9) "localhost" ``` - 支持多文件载入 ```php $dotenv->load(__DIR__.'/.env.local',__DIR__.'/.env');//如果配置已经存在则不会使用配置文件里的配置,如果不存在则后面的会覆盖前面的配置 ``` 配置文件内容,下面的讲解说明都是假设配置文件内容是这个 ```shell //.env内容 DB_NAME=localhost DB_USER=.env //.env.local内容 DB_NAME=127.0.0.1 ``` php文件内容: ```php $dotenv->load(__DIR__.'/.env.local',__DIR__.'/.env'); var_dump($_SERVER['DB_NAME']);//string(9) "localhost" var_dump($_SERVER['DB_USER']);//string(4) ".env" ``` ```php $_SERVER['DB_NAME'] = 'test'; $dotenv->load(__DIR__.'/.env.local',__DIR__.'/.env'); var_dump($_SERVER['DB_NAME']);//string(4) "test" var_dump($_SERVER['DB_USER']);//string(4) ".env" ``` 可以得出结论,当多文件load时,如果配置已经存在则不会覆盖,如果配置不存在,则多文件里面后面的配置会覆盖前面的配置。 ```php $dotenv->overLoad(__DIR__.'/.env.local',__DIR__.'/.env'); var_dump($_SERVER['DB_NAME']);//string(9) "localhost" var_dump($_SERVER['DB_USER']);//string(4) ".env" ``` 调用overLoad方法时,多文件中后面文件的配置变量值总是覆盖前面的配置值。 - loadEnv() 按照.env、 .env.local、.env.$APP_ENV.local和.env.$APP_ENV的顺序从配置文件加载配置。 ```php $dotenv->loadEnv(__DIR__.'/.env'); var_dump($_SERVER['DB_NAME']);//string(9) "127.0.0.1" var_dump($_SERVER['DB_USER']);//string(4) ".env" ``` - usePutenv() 使用usePutenv后,可以使用getenv函数获取$_SERVER、或者$\_ENV里面的配置项 ```php $dotenv->usePutenv(); $dotenv->loadEnv(__DIR__.'/.env'); //string(9) "127.0.0.1" string(9) "127.0.0.1" var_dump($_SERVER['DB_NAME'],getenv('DB_NAME')); //string(4) ".env" string(4) ".env" var_dump($_SERVER['DB_USER'],getenv('DB_USER')); ``` ```php //$dotenv->usePutenv(); $dotenv->loadEnv(__DIR__.'/.env'); //string(9) "127.0.0.1" bool(false) var_dump($_SERVER['DB_NAME'],getenv('DB_NAME')); //string(4) ".env" bool(false) var_dump($_SERVER['DB_USER'],getenv('DB_USER')); ``` 我们可以看到,没有使用usePutenv()方法时,getenv获取不到$_SERVER以及加载到$_SERVER里面的配置变量 最后更新时间为: 4个月前 (2020-08-13 22:21:00)