CodeIgniter 3.1.6通过.env加载数据库配置遇内部服务器错误
解决CodeIgniter 3.1.6中通过.env加载数据库配置的问题
问题根源
CodeIgniter 3.1.6原生不支持.env文件和env()函数——这个函数是CodeIgniter 4才引入的特性。直接调用env()会触发“调用未定义函数”的致命错误,导致内部服务器错误。
解决方案:手动实现.env加载
通过PHP原生函数解析.env文件,将配置导入项目,具体步骤如下:
1. 确认.env文件位置与内容
将.env放在项目根目录(与application、system文件夹同级),填入实际数据库配置:
database.default.hostname = localhost database.default.database = your_database_name database.default.username = your_db_user database.default.password = your_db_password database.default.DBDriver = mysqli
注意:给
.env设置权限为600,禁止外部访问,避免敏感信息泄露。
2. 在入口文件加载.env配置
打开项目根目录的index.php,在文件最顶部添加解析代码:
// 加载.env配置文件 $envFile = FCPATH . '.env'; if (file_exists($envFile)) { // 解析为多维数组,保留分组结构 $envConfig = parse_ini_file($envFile, true); // 将配置转为大写常量,方便调用 foreach ($envConfig as $group => $items) { foreach ($items as $key => $value) { $constantName = strtoupper(str_replace('.', '_', "$group.$key")); define($constantName, $value); } } }
3. 修改database.php引用配置
打开application/config/database.php,替换env()调用为定义好的常量:
$db['default'] = array( 'DSN' => '', 'hostname' => DATABASE_DEFAULT_HOSTNAME, 'username' => DATABASE_DEFAULT_USERNAME, 'password' => DATABASE_DEFAULT_PASSWORD, 'database' => DATABASE_DEFAULT_DATABASE, 'DBDriver' => DATABASE_DEFAULT_DBDRIVER, // 保留其他默认配置项(如DBPrefix、pConnect等) );
替代方案:使用全局数组引用
如果不想定义常量,可在application/config/config.php顶部加载.env并存入全局数组:
$envFile = FCPATH . '.env'; if (file_exists($envFile)) { $GLOBALS['env_config'] = parse_ini_file($envFile, true); }
然后在database.php中直接调用:
$env = $GLOBALS['env_config']; $db['default'] = array( 'DSN' => '', 'hostname' => $env['database']['default']['hostname'], 'username' => $env['database']['default']['username'], 'password' => $env['database']['default']['password'], 'database' => $env['database']['default']['database'], 'DBDriver' => $env['database']['default']['DBDriver'], // 其他配置项 );
验证
保存修改后重启服务器,内部服务器错误会消失,数据库将通过.env配置正常连接。
内容的提问来源于stack exchange,提问作者Buddhima Chamaranga
相关产品推荐
相关产品推荐

