1. 通过parse_ini_file 函数来获取.env 文件的配置参数。
    [#DB Config]    // 加上中括号表示 【章节名】后面不能直接接 = 会报错
    [DB_USER]root=ooo   // 如果parse_ini_file 第二参数为false,则章节名会被忽略,为true则会作为数组键名返回(即返回多维数组)。设置【章节】 便于管理配置参数,比如mysql,redis。。。
    DB_PASS=root  // 配置参数必须有“=”连接,没有=的会被忽略,#和//在这里都没有注释作用,即便写了也没用,会被作为数组键名。
    DB_USER // 比如这个没加 = 是获取不到这个值的
    [aa] //另一个好处:当parse_ini_file 第二个参数为true 的时候,并且配置了【章节名】那么重复定义的常量都会获取到(这里的ab),如果没有同时设置true 和 章节名, 那么重复的会被覆盖掉,取最后一个值(就是数组相同键名覆盖)
    ab=a
    [bb]
    ab=b
    不加中括号而且没有接=的,都会被忽略,所以可以以这种方法加“注释”。
    mysql // 就相当于注释的作用了,而且parse_ini_file 第二个参数设置为 true 也不会读取到mysql
    DB_USER=root

     

  2. 读取env文件全局函数(yii框架放在入口文件或者其他能全局的地方。或者配置成助手类的形式):
     1 if (!function_exists('env')) {
     2     function env($name, $file='.env')
     3     {
     4         $path = \Yii::$app->basePath;
     5         $filePath = rtrim($path, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR . $file;
     6         $configs = parse_ini_file($filePath, true);
     7         if (empty($configs)) {
     8             die('err: file is empty');
     9         }
    10         // 判断 是否加了注释 # 并且判断是否设置【章节】即是否是二维数组
    11         foreach ($configs as $key => $val) {
    12             if (is_array($val)) {
    13                 foreach ($val as $k => $v) {
    14                     if (substr($k, 0, 1) == '#' || substr($key, 0, 2) == '//') {
    15                         unset($configs[$key][$k]);
    16                     }
    17                     // 如果传了$name 字段,那么根据name获取指定的字段值
    18                     if ($k == $name && !empty($name)) {
    19                         return isset($configs[$key][$k]) ? $configs[$key][$k] : null;
    20                     }
    21                 }
    22             } else {
    23                 if (substr($key, 0, 1) == '#' || substr($key, 0, 2) == '//') {
    24                     unset($configs[$key]);
    25                 }
    26                 // 如果传了$name 字段,那么根据name获取指定的字段值
    27                 if ($key == $name && !empty($name)) {
    28                     return isset($configs[$key]) ? $configs[$key] : null;
    29                 }
    30             }
    31         }
    32         return ($configs) ;
    33     }
    34 }
    env函数

     放在yii 入口文件里 必须放在config 前面,例如

    if (!function_exists('env')) {
        function env($name, $file='.env')
        {
            $path = __DIR__ . '/../'; //在这里还用不了\Yii::$app->basePath ,因为还没注册
            $filePath = rtrim($path, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR . $file;
            $configs = parse_ini_file($filePath, true);
            if (empty($configs)) {
                die('err: file is empty');
            }
            // 判断 是否加了注释 # 并且判断是否设置【章节】即是否是二维数组
            foreach ($configs as $key => $val) {
                if (is_array($val)) {
                    foreach ($val as $k => $v) {
                        if (substr($k, 0, 1) == '#' || substr($key, 0, 2) == '//') {
                            unset($configs[$key][$k]);
                        }
                        // 如果传了$name 字段,那么根据name获取指定的字段值
                        if ($k == $name && !empty($name)) {
                            return isset($configs[$key][$k]) ? $configs[$key][$k] : null;
                        }
                    }
                } else {
                    if (substr($key, 0, 1) == '#' || substr($key, 0, 2) == '//') {
                        unset($configs[$key]);
                    }
                    // 如果传了$name 字段,那么根据name获取指定的字段值
                    if ($key == $name && !empty($name)) {
                        return isset($configs[$key]) ? $configs[$key] : null;
                    }
                }
            }
            return ($configs) ;
        }
    }
    //  必须放在这句之前才有效
    $config = require __DIR__ . '/../config/web.php';  
    yii index.php配置env函数