使用之式
1.环境变量 (优先)
php start.php start -e APP_ENV=development
2.在.env文件中写入
WENMAN_ENV=development
找一个僻静角落,轻轻放入.
<?php
namespace app\common;
class Env
{
public static function init(): void
{
global $argv;
$env = '';
//从环境变量获取 APP_ENV
foreach ($argv as $key => $value) {
if ($value == '-e' && array_key_exists($key + 1, $argv) && str_contains($argv[$key + 1], '=')) {
list($name, $value) = explode('=', $argv[$key + 1]); // $argv[$key + 1] = "APP_ENV=DEV" key value
if ($name == 'APP_ENV' && file_exists(base_path() . '/.env.' . $value)) {
$env = parse_ini_file(base_path() . '/.env.' . $value);
}
}
}
//从.env 文件获取 WENMAN_ENV=development env文件全名 .env.development
if (empty($env) && file_exists(base_path() . '/.env')) {
$env = parse_ini_file(base_path() . '/.env', true);
if (isset($env['WENMAN_ENV'])) {
$env = parse_ini_file(base_path() . '/.env.' . $env['WENMAN_ENV'], true);
}
}
//初始化ENV 配置
if (is_array($env)) {
foreach ($env as $key => $val) {
//过滤首字母#或者'//'开头的注释
if (str_starts_with($val, '#') || str_starts_with($val, '//')) continue;
if (is_array($val)) {
foreach ($val as $k => $v) { //如果是二维数组 item = PHP_KEY_KEY
$item = $key . '_' . $k;
putenv("$item=$v");
}
} else {
putenv("$key=$val");
}
}
}
}
}
掰开 config/server.php
在return 之前加入一行
\app\common\Env::init();
return [....];
使用 getenv获取环境变量
或者封装一个助手函数
function envs($key, $default = null): string|array|null
{
$value = getenv($key, true);
if ($value === false) return $default;
return $value;
}