背景
主流的开发框架都支持env模式,无论是java、node、vue还是php,php比较有代表性的框架有laravel、TP6,它们都支持读env配置,小编眼界有限,不知道还有没有其他框架支持。
就当其他框架都不支持吧,接下来用我提供的方法轻微改造一下即可。
使用环境变量的优势
- 资源配置不需要写在代码里,利于项目维护和拓展。
- 开发环境、测试环境、灰度环境、生产环境等配置内容各有不同,使用环境变量可支持同一份代码,在多环境中运行互不干扰。
- 多客户项目部署
使用前提
linux系统,php启用putenv函数
假设.env文件有以下内容
[db]
master.host=127.0.0.1
master.database=mydb
master.password=mydbxxx
master.port=3306
[redis]
host=127.0.0.1
port=6379
select=0
在公共文件中加入以下代码
define('__ROOT__','根目录');
define('ENV_PRE','PHP_');
if (is_file( __ROOT__. '/.env')) {
$env = parse_ini_file(__ROOT__ . '/.env', true);
foreach ($env as $key => $val) {
$name = ENV_PRE . strtoupper($key);
if (is_array($val)) {
foreach ($val as $k => $v) {
$item = $name . '_' . strtoupper(str_replace('.','_',$k));
putenv("$item=$v");
}
} else {
putenv("$name=$val");
}
}
}
if (!function_exists('env')) {
function env($name,$default=null)
{
$result = getenv(ENV_PRE . strtoupper(str_replace('.', '_', $name)));
if (false !== $result) {
if ('false' === $result) {
$result = false;
} elseif ('true' === $result) {
$result = true;
}
}else{
$result = $default;
}
if(is_string($result) && strpos($result,',')){
$result = explode(',',$result);
//array_pop($result);
}
return $result;
}
}
假如项目的配置文件是config.php
//从.env文件中读取数据库配置和redis配置
return [
'db'=>[
'host'=>env('db.master.host'),
'database'=>env('db.master.database'),
'password'=>env('db.master.password'),
'port'=>env('db.master.port'),
],
redis=>[
'host'=>env('redis.host','127.0.0.1'),
'port'=>env('redis.port',6379)
]
];

发表评论