Laravel5.5解析-bootstrap列表-LoadEnvironmentVariables

背景:实现$bootstrappers中的LoadEnvirenmentVariables,非cli模式

bootstrap()

	//class Illuminate\Foundation\Bootstrap\LoadEnvironmentVariables
    public function bootstrap(Application $app)
    {
    	//$app->environmentPath()='root_path',$app->environmentFile()='.env'
        (new Dotenv($app->environmentPath(), $app->environmentFile()))->load();
    }

初始化Dotenv并执行load()

    public function __construct($path, $file = '.env')
    {
        $this->filePath = $this->getFilePath($path, $file);
        $this->loader = new Loader($this->filePath, true);
    }
    public function load()
    {
        return $this->loadData();
    }
    protected function loadData($overload = false)
    {
    	// setImmutable设定了$loader->immutable=ture
        return $this->loader->setImmutable(!$overload)->load();
    }

将.env配置文件中的设定添加到超全局变量ENV,SERVER中

    public function load()
    {
        $this->ensureFileIsReadable();//校验.env文件是否可读

        $filePath = $this->filePath;
        $lines = $this->readLinesFromFile($filePath);//通过file()以行为单位读取内容
        foreach ($lines as $line) {
        	//校验不存在注释“#”且存在“=”则进行环境变量设置
            if (!$this->isComment($line) && $this->looksLikeSetter($line)) {
                $this->setEnvironmentVariable($line);
            }
        }

        return $lines;
    }

setEnvironmentVariable()

    public function setEnvironmentVariable($name, $value = null)
    {
    	//获取$file内容截取并过滤,分别赋值给$name,$value
        list($name, $value) = $this->normaliseEnvironmentVariable($name, $value);
        $this->variableNames[] = $name;
        //对已经设置过的环境变量不进行覆盖
        if ($this->immutable && $this->getEnvironmentVariable($name) !== null) {
            return;
        }
		//对apache设定的环境变量进行覆盖
        if (function_exists('apache_getenv') && function_exists('apache_setenv') && apache_getenv($name) !== false) {
            apache_setenv($name, $value);
        }
		//将env信息添加到getenv()中
        if (function_exists('putenv')) {
            putenv("$name=$value");
        }
		//将env信息添加到$_ENV与$_SERVER
        $_ENV[$name] = $value;
        $_SERVER[$name] = $value;
    }


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值