CodeIgniter通过$active_group变量和ENVIRONMENT常量实现多环境数据库配置切换;在database.php中定义development/testing/production等数组组,动态设置$active_group匹配对应环境,需确保index.php中正确声明ENVIRONMENT常量。

CodeIgniter 支持按环境切换数据库配置,核心是利用 application/config/database.php 中的多维数组结构 + 环境变量控制 $active_group,无需修改代码逻辑即可适配开发、测试、生产等场景。
配置多个环境组(如 development / testing / production)
在 database.php 中,为每个环境定义独立的数据库连接组,键名可自定义(不强制用 default):
-
$db['development']:本地开发用,如localhost、空密码、启用db_debug -
$db['testing']:测试服务器专用,可能连远程 MySQL 实例,关闭调试但开启查询日志 -
$db['production']:线上环境,禁用db_debug、使用强密码、指定char_set为utf8mb4、启用连接池(pconnect = TRUE)
设置当前激活的环境组
关键在于文件末尾的 $active_group 变量,它决定加载哪个组:
- 直接写死:
$active_group = 'production';—— 适合单环境部署 - 动态判断(推荐):
$active_group = (ENVIRONMENT === 'production') ? 'production' : ((ENVIRONMENT === 'testing') ? 'testing' : 'development');
这样只要 CodeIgniter 的index.php中已正确定义ENVIRONMENT常量(如define('ENVIRONMENT', 'production');),就能自动匹配
确保环境常量已生效
CodeIgniter 默认通过 index.php 设置环境,检查该文件顶部是否类似:
define('ENVIRONMENT', isset($_SERVER['CI_ENV']) ? $_SERVER['CI_ENV'] : 'development');- 或更稳妥的方式:
define('ENVIRONMENT', 'production');(上线时手动改) - 也可通过 Web 服务器设置环境变量(如 Apache 的
SetEnv CI_ENV production或 Nginx 的fastcgi_param CI_ENV production;)
验证是否生效
在控制器中加一行调试输出:
var_dump($this->db->hostname, $this->db->database, ENVIRONMENT);- 若显示的是 production 配置值且
ENVIRONMENT为'production',说明切换成功 - 注意:一旦
$this->db被初始化(如首次调用$this->load->database()),$active_group就已锁定,不可中途更改


















