codeigniter 原生不读取 .env 文件,必须手动修改 app/config/database.php(ci4)或 application/config/database.php(ci3)中的数据库配置数组,否则仅改 .env 无效。

不需要,CodeIgniter 原生不读取 .env 文件,所以仅改 .env 里的数据库配置(比如 DB_HOST=localhost)是完全无效的——框架根本不会去解析它。
你必须手动修改 app/Config/Database.php(CI4)或 application/config/database.php(CI3),把连接参数写进 $db['default'] 数组里。
✅ 正确做法:直接改 Database.php
CI 框架的设计逻辑就是「配置即代码」,所有数据库参数都硬编码在 PHP 配置文件中:
-
CI4 路径:
app/Config/Database.php
找到public $default属性,填入:public $default = [ 'DSN' => '', 'hostname' => 'localhost', 'username' => 'root', 'password' => '', 'database' => 'my_app', 'DBDriver' => 'MySQLi', // 其他字段保持默认即可 ]; -
CI3 路径:
application/config/database.php
修改$db['default']数组对应键:$db['default'] = [ 'hostname' => 'localhost', 'username' => 'root', 'password' => '', 'database' => 'my_app', 'dbdriver' => 'mysqli', // ... ];
❌ 常见误区:以为像 Laravel 那样支持 .env 自动注入
- Laravel 的
config/database.php会调用env()函数读取.env; - CodeIgniter 的
Database.php是纯 PHP 数组,没有env()调用逻辑,除非你自己加(不推荐,破坏可维护性)。
⚠️ 注意:CI4 官方文档虽提到可“通过
.env设置数据库参数”,但那只是文档示例误导。实际运行时,CI4 并未在 Database 类中自动读取.env,仍需你手动把值从.env复制/映射过去。
? 如果真想用 .env(进阶可选)
你可以自己在 app/Config/Database.php 开头加一行(CI4):
$dotenv = Dotenv\Dotenv::createImmutable(ROOTPATH); $dotenv->load();
再把数组值改成:
'hostname' => $_ENV['DB_HOST'] ?? 'localhost', 'username' => $_ENV['DB_USERNAME'] ?? 'root', // ...
但这就引入了额外依赖(vlucas/phpdotenv),且要确保 ROOTPATH 正确、.env 在根目录、Web 服务器能读取环境变量——对新手不友好,也非标准做法。
✅ 验证是否生效
改完 Database.php 后,运行一个简单查询测试:
$db = \Config\Database::connect();
var_dump($db->table('users')->countAll()); // 应返回数字,不报错即连通
如果报错 Connection refused 或 Access denied,说明 hostname、用户名或密码不对;
如果报 No database selected,检查 'database' 字段是否为空或拼写错误。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











