ThinkPHP框架的.env读取原理
2022-07-28 14:14:58
223
{{single.collect_count}}

ThinkPHP框架的.env读取原理 


<?phpclass Env{static $initialize;/** * 获取环境变量值 * @access public * @paramstring $name环境变量名(支持二级 . 号分割) * @paramstring $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 = mysqlhostname = 127.0.0.1username =rootpassword = 123456port = 3306database = 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,]];

回帖
全部回帖({{commentCount}})
{{item.user.nickname}} {{item.user.group_title}} {{item.friend_time}}
{{item.content}}
{{item.comment_content_show ? '取消' : '回复'}} 删除
回帖
{{reply.user.nickname}} {{reply.user.group_title}} {{reply.friend_time}}
{{reply.content}}
{{reply.comment_content_show ? '取消' : '回复'}} 删除
回帖
收起
没有更多啦~
{{commentLoading ? '加载中...' : '查看更多评论'}}