解析tp5中.env配置文件的加载原理

简介

.env 是 thinkphp、laravel框架的本地配置文件,位置一般放在项目的根目录下。

thinkphp 入口脚本分析

index.php

<?php
// 定义应用目录
define('APP_PATH', __DIR__ . '/../application/');
// 定义上传目录
define('UPLOAD_PATH', __DIR__ . '/../public');
// 定义应用缓存目录
define('RUNTIME_PATH', __DIR__ . '/../runtime/');
// 开启调试模式
define('APP_DEBUG', true);
// 加载框架引导文件
require __DIR__ . '/../thinkphp/start.php';

入口脚本中包含了一个start.php文件,下面我们再进入这个文件。

start.php

<?php
namespace think;

// ThinkPHP 引导文件
// 加载基础文件
require __DIR__ . '/base.php';
// 执行应用
App::run()->send();

这个文件中又包含了一个base.php文件,我们再看看这个文件内容。

base.php

<?php
// 这里有很多常量的定义,为了观看方便我这里删除那些代码
// 常量定义的代码

// 载入Loader类
require CORE_PATH . 'Loader.php';

// 加载环境变量配置文件
if (is_file(ROOT_PATH . '.env')) {
    // 将.env文件解析成二维数组
    $env = parse_ini_file(ROOT_PATH . '.env', true);
    foreach ($env as $key => $val) {
        $name = ENV_PREFIX . strtoupper($key);
        if (is_array($val)) {
            foreach ($val as $k => $v) {
                $item = $name . '_' . strtoupper($k);
                // 将这些文件中的参数添加一些前缀转大写之后放入到系统的环境变量中,后台通过Env函数获取的时候就可以直接通过getenv()获取了
                putenv("$item=$v");
            }
        } else {
            putenv("$name=$val");
        }
    }
}

// 注册自动加载
\think\Loader::register();

// 注册错误和异常处理机制
\think\Error::register();

// 加载惯例配置文件
\think\Config::set(include THINK_PATH . 'convention' . EXT);

上面有一个注释是加载环境变量配置文件,我们发现部分代码就是加载.env文件的代码,那么这几行代码主要干了什么呢,下面做一个简单的解释:

// 解析一个与php.ini结构类似的文件,返回一个数组
parse_ini_file()

// 设置环境变量,通过这个函数设置了环境变量,我们就可以通过getenv()获取了
putenv()

发布了48 篇原创文章 · 获赞 13 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_37825371/article/details/104995543