ThinkPHP框架的.env读取原理


<?phpclass Env
{static $initialize;/*** 获取环境变量值* @access public* @param  string $name    环境变量名(支持二级 . 号分割)* @param  string $default 默认值* @return mixed*/public static function get($name, $default = null){// 初始化一次if(!self::$initialize){self::init();self::$initialize = true;}$result = getenv(ENV_PREFIX . strtoupper(str_replace('.', '_', $name)));if (false !== $result) {if ('false' === $result) {$result = false;} elseif ('true' === $result) {$result = true;}return $result;}return $default;}/*** 初始化设置环境变量值(只需要执行一次,所以建议放入口文件执行)* @access public* @return mixed*/private static function init(){defined('ENV_PREFIX') or define('ENV_PREFIX', 'PHP_'); // 环境变量的配置前缀$envPath = dirname(dirname(dirname(__DIR__))).'/';if (is_file($envPath . '.env')) {$env = parse_ini_file($envPath . '.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);putenv("$item=$v");}} else {putenv("$name=$val");}}}}
}

最佳实践:

配置文件中调用此类来获取设置,不建议在业务代码中直接调用

.env 文件

[app]
debug = true[database]
type = mysql
hostname = 127.0.0.1
username =  root
password = 123456
port = 3306
database = taobao

配置文件调用:

return [// 数据库类型'type'           => Env::get('database.type','mysql'),// 服务器地址'hostname'       => Env::get('database.hostname','127.0.0.1'),// 数据库名'database'       => Env::get('database.database','taobao'),// 用户名'username'       => Env::get('database.username','root'),// 密码'password'       => Env::get('database.password',''),// 端口'hostport'       => Env::get('database.port','3306'),// 连接dsn'dsn'            => '',// 数据库连接参数'params'         => ['MYSQL_ATTR_USE_BUFFERED_QUERY' => true,]
];

ThinkPHP框架的.env读取原理相关推荐

  1. php读取excel中数据库,ThinkPHP 框架实现的读取excel导入数据库操作示例

    本文实例讲述了ThinkPHP 框架实现的读取excel导入数据库操作.分享给大家供大家参考,具体如下: 入口文件中: require_once VENDOR_PATH.'PHPExcel/PHPEx ...

  2. thinkphp 框架自动加载原理_ThinkPHP5分析Part 1 基本框架流程

    ThinkPHP是一个免费开源的,快速.简单的面向对象的轻量级PHP开发框架,是为了敏捷WEB应用开发和简化企业应用开发而诞生的.ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能 ...

  3. thinkphp 框架自动加载原理_thinkPHP5.0框架自动加载机制分析

    本文实例讲述了thinkPHP5.0框架自动加载机制.分享给大家供大家参考,具体如下: 概述 ThinkPHP5.0 真正实现了按需加载,所有类库采用自动加载机制,并且支持类库映射和composer类 ...

  4. thinkphp 框架自动加载原理_这下你应该理解ThinkPHP的Loader自动加载了

    想了很久终于要开始系列文章的编写了,期望是写出提升和面试都可以搞定的系列文章. 当你看到本文时,如果你发现咔咔没有编写到的面试热点问题或者技术难点,期待评论区指出,一起完善. 前言 目前再整理PHP进 ...

  5. 链式写法php,ThinkPHP框架SQL操作链式写法原理

    下面给大家介绍ThinkPHP框架SQL操作链式写法原理,希望对需要的朋友有所帮助! 引言 大家如果有面试几次不难发现,虽然国产的TP一直被人诟病.但是丝毫不能影响它在广大企业中的开发受到青睐,强大的 ...

  6. ThinkPHP框架执行流程源码解析

    本文主要介绍框架的执行流程 ThinkPHP框架执行流程 前言 一.框架执行流程之初始化应用的数据设置 二.如何查看一个方法都在哪里执行了 三.框架执行流程之初始化应用init分析 四.对容器中的对象 ...

  7. 从ThinkPHP框架核心讨论C、E、G、L、T、I、N...等函数

    如果只是从了解怎么用这几函数的角度看,直接看官方发布的文档即可!但是要了解这些函数是怎么被ThinkPHP框架定义调用的,那需要另外一番讨 论了.还好,ThinkPHP官方在源码力做了很好的注释,通过 ...

  8. 【ThinkPHP系列篇】Thinkphp框架的CURD操作(三)

    本节介绍的CURD的基本操作依托于Thinkphp框架的第二节中的News例子. a) 什么是CURD操作? C(创建):create:U(更新):update:R(读取):read:D(删除):de ...

  9. 插件框架实现思路及原理

    插件框架实现思路及原理 一.技术可行性 a) apk的安装处理流程 i. apk会copy到/data/app: ii. 解压apk中的class.dex,并对其进行优化,获得odex(即JIT).最 ...

最新文章

  1. 1.13 南京站 | 2022 开年 Serverless 沉浸式技术实践营开始报名
  2. 输入记忆功能如何恢复
  3. ajax跨域请求.json文件,使用JSONP对JSON文件进行跨域Ajax请求
  4. scrapy使用(无头)浏览器爬取动态网页
  5. 如何恢复任务栏中的显示桌面图标?
  6. “杜绝电子垃圾,我们需要软件永远更新下去!”
  7. 小马哥---高仿山寨三星S8出世 谨防购买到假货!! 高仿三星S8 s305刷机拆机主板图示
  8. Prizmo Pro for Mac(OCR文字扫描识别软件)
  9. 什么是网络编程(一)
  10. flutter11 - 调试程序
  11. 交易apple id但是忘了关闭icloud,如何关闭激活锁?
  12. crx什么意思_CRX文件怎么打开-CRX是什么格式-CRX文件是什么意思-腾牛网
  13. Python灰帽子黑客与逆向工程师的Python编程之道
  14. u深度制作linux启动盘制作工具,u深度u盘启动盘制作工具教程
  15. 视频去水印、文案提取和智能配音,视频搬运合成速成教程,超简单
  16. sublime搭建基于GoSublime+gocode+MarGo的下载SublimeGO开发环境
  17. JavaScript实现异步请求并发数限制
  18. html中 title标签放在()位置,[单选] HTML中,title标签放在什么位置()
  19. 自制语言——Timi
  20. vs2010打包发布注意事项

热门文章

  1. 【君思智慧园区】物业综合管理系统,物业管理收费软件系统包括哪些?
  2. 看看如何辨别自己是什么肤质。
  3. Google nexus 6p android 8.0——android 6.0 两部曲
  4. 【JAVA秘籍心法篇-Spring】Spring XML解析源码详解
  5. Hadoop集群中MySQL数据库的使用
  6. c# 使用线程对串口serialPort进行收发数据
  7. 《杀戮地带4》光照技术
  8. Smartdraw世界上最流行的商业绘图软件
  9. NFS服务6---四种情况的权限实验
  10. While.....Wend和Do While....Loop