codeigniter通过环境变量自动适配多服务器环境:统一入口由environment常量控制运行模式,分层配置按environment子目录加载对应config文件,数据库支持多组连接动态切换,base_url避免硬编码并结合https与环境判断生成。

CodeIgniter基础配置适配不同服务器环境,核心是让同一套代码在开发、测试、生产等环境下自动加载对应参数,避免手动改配置出错。关键不在改框架本身,而在控制入口行为和配置加载逻辑。
统一入口:用环境变量决定运行模式
CodeIgniter 从 index.php 开始执行,它会读取 ENVIRONMENT 常量来判断当前环境。这个常量的值直接影响错误显示、数据库调试、缓存开关等行为。
- Apache 环境下,在 .htaccess 或虚拟主机配置里加:
SetEnv CI_ENVIRONMENT production - Nginx 环境下,需在 server 块中通过 fastcgi_param 传递:
fastcgi_param CI_ENVIRONMENT "testing"; - 本地开发时,也可直接在 index.php 中临时写死(仅限调试):
define('ENVIRONMENT', 'development');
分层配置:按环境组织 config 文件
不要把所有配置都堆在 application/config/ 根目录下。推荐做法是按环境建子目录:
-
application/config/development/:放开发专用的 database.php、app.php,比如开启
db_debug = TRUE、log_threshold = 4 - application/config/production/:关闭错误显示、启用缓存、使用正式数据库地址和凭据
- application/config/testing/:连接测试库,禁用邮件真实发送,模拟第三方服务响应
框架会自动优先加载对应环境子目录下的同名配置文件,无需额外代码干预。
数据库连接:支持多组+动态切换
database.php 支持定义多个连接组,配合环境变量可实现无缝切换:
- 在 application/config/database.php 中定义
$db['dev']、$db['prod']、$db['test']等数组 - 用
$active_group = (ENVIRONMENT === 'production') ? 'prod' : 'dev';动态指定当前激活组 - 这样即使 hostname 写的是
127.0.0.1还是db.internal.prod,也能由环境自动选对
路径与 URL:避免硬编码 base_url
$config['base_url'] 不要写死为 http://localhost/myapp/,否则上线就得改。
- 推荐方式:用 PHP 自动推导,例如
$config['base_url'] = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? 'https://' : 'http://') . $_SERVER['HTTP_HOST'] . '/'; - 或更稳妥地结合环境判断:
$config['base_url'] = (ENVIRONMENT === 'production') ? 'https://example.com/' : 'http://localhost/myapp/'; - CI4 用户注意:public/ 必须设为 Web 根目录,否则 base_url 和资源路径全乱











