您好,欢迎访问一九零五行业门户网

Laravel5中环境变量的载入

laravel5中环境变量的载入
bootstrap 在kernel中可以发现第一个启动项就是关于env的
protected $bootstrappers = [ 'illuminate\foundation\bootstrap\detectenvironment', 'illuminate\foundation\bootstrap\loadconfiguration', 'illuminate\foundation\bootstrap\configurelogging', 'illuminate\foundation\bootstrap\handleexceptions', 'illuminate\foundation\bootstrap\registerfacades', 'illuminate\foundation\bootstrap\registerproviders', 'illuminate\foundation\bootstrap\bootproviders',];
illuminate\foundation\bootstrap\detectenvironment 在这个类中启动,进入查找,会发现
try{ dotenv::load($app->basepath(), $app->environmentfile());}catch (invalidargumentexception $e){ //}$app->detectenvironment(function(){ return env('app_env', 'production');});
具体的方法就是dotenv的一个静态load方法,并且如果读取失败,会默认设置为’production’
这里可以看到load传入的两个参数是为了找到读取文件的位置,$app->environmentfile()返回的是文件名,是$app->environmentfile,默认是.env。在$app中有一个方法:
public function loadenvironmentfrom($file){ $this->environmentfile = $file; return $this;}
用这个方法可以修改载入env文件的名字。
解析env文件 dotenv::load方法先判断文件is_readable 和 is_file,否则抛出异常。ini_get, ini_set设定auto_detect_line_endings为1,然后再设会原来的值。
file($filepath, file_ignore_new_lines | file_skip_empty_lines);
读出文件的每一行,然后foreach遍历,然后设置环境变量。可以发现,这里支持nestedvariable,就是说设置过的变量可以用$(var_exists)在读取其值,类似shell。
设置变量存在于三个位置,putevn(), $_env, $_server, 并且会判断是否key是否重复,如果重复就跳过。
读取时候也是从这三个位置, getenv(),$_env, $_server。
app中的几个关于env的方法: public function environmentfile()默认返回’.env’
public function environment()不带参数,返回当前env的值;如果带参数(array),则遍历比对判断,如果包含当前环境名称,则返回true
public function islocal() $app[‘env’]是否等于’local’
public function afterloadingenvironment(closure $callback)
public function detectenvironment(closure $callback)
其它类似信息

推荐信息