600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > ThinkPHP框架的.env读取原理

ThinkPHP框架的.env读取原理

时间:2019-06-30 13:11:43

相关推荐

ThinkPHP框架的.env读取原理

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 = 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,]];

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。