codeigniter中新增配置需在application/config/下新建php文件(如payment.php),返回数组,通过$this->config->load()加载并用item()读取;禁在config.php中硬塞业务配置;自动加载需在autoload.php中声明,注意路径和覆盖顺序;环境配置应通过environment常量判断。

直接加就行,不用改任何加载逻辑,但必须放在正确位置、用正确方式声明。
application/config/ 下新建配置文件即可
CodeIgniter 的 config 目录天然支持多文件加载,只要文件名不和内置配置冲突(如 config.php、database.php),就能被自动识别。比如你想加一个「支付相关」的配置:
- 新建
application/config/payment.php - 内容必须是返回数组的 PHP 文件,不能有输出或语法错误:
<?php defined('BASEPATH') OR exit('No direct script access allowed');
return [
'gateway' => 'alipay',
'sandbox' => true,
'timeout' => 30,
];
之后在控制器里用 $this->config->load('payment') 加载,再用 $this->config->item('gateway', 'payment') 读取 —— 注意第二个参数是文件名(不含 .php)。
不要在 config.php 里直接写自定义项
虽然 application/config/config.php 是主配置文件,但它只用于框架级开关(如 $config['base_url']、$config['subclass_prefix'])。往里面硬塞业务配置会带来两个问题:
- 所有请求都强制加载,哪怕某次请求根本用不到 payment 配置,白白增加开销
- 无法按需重载:比如后台要切测试网关,你得动态改
config.php再清缓存,容易出错
真正该放这里的,只有全局生效、且生命周期贯穿整个请求的设置,比如 $config['encryption_key'] 或 $config['csrf_protection']。
自动加载配置项要小心路径和时机
如果希望某个配置文件「每次请求都自动加载」,可以在 application/config/autoload.php 的 $autoload['config'] 数组里加进去:
$autoload['config'] = ['payment', 'sms', 'wechat'];
但要注意:
- 这些文件必须存在于
application/config/下,不能放在子目录(如application/config/api/payment.php不会被识别) - 加载顺序会影响覆盖行为:后加载的同名 key 会覆盖前面的,所以别把
development.php和production.php同时 auto-load - 若配置项依赖环境变量(如数据库密码),建议用
getenv()在配置文件里读取,而不是写死
环境专用配置要用 ENVIRONMENT 常量判断
CodeIgniter 支持通过 ENVIRONMENT 常量区分开发/测试/生产环境。常见做法是在 application/config/ 下建 development.php、production.php 等文件,然后在入口文件(如 index.php)中设置:
define('ENVIRONMENT', isset($_SERVER['CI_ENV']) ? $_SERVER['CI_ENV'] : 'development');
接着在配置文件里做条件判断:
<?php if (ENVIRONMENT === 'production') {
$config['cache_enabled'] = true;
$config['log_threshold'] = 1;
} else {
$config['cache_enabled'] = false;
$config['log_threshold'] = 4;
}
这种写法比维护多个 autoload 列表更清晰,也避免了因忘记切换配置导致线上事故 —— 最容易被忽略的是,ENVIRONMENT 默认值是 development,上线前不显式设为 production,日志和调试信息就可能泄露。










