codeigniter 4 默认通过根目录下的 .env 文件管理数据库配置,需严格使用 database.default.* 格式键名、确保文件存在且权限正确、app_env 为 development 或 production,并通过 var_dump(config('database')->default) 验证实际加载效果。

CodeIgniter 4 默认用 .env 文件管理数据库配置,比改 PHP 配置文件更灵活、更安全,尤其适合区分开发与生产环境。关键不是“能不能用”,而是“必须用对格式、放对位置、避开常见干扰项”。
确保 .env 文件存在且生效
CI4 启动时会自动加载项目根目录下的 .env 文件(即和 app/、public/ 同级的位置)。如果文件不存在,框架会退回到默认配置(通常连不上);如果存在但被重命名(如 .env.example),也不会生效。
- 检查文件名是否确实是
.env(无后缀、开头带点) - 确认文件权限允许 Web 服务器读取(一般 644 即可)
- 删掉开头的
#注释符——很多新手复制模板后忘记取消注释
写对数据库配置项的键名和值
CI4 的 .env 不识别旧版 CI3 的写法(如 hostname),必须用它定义的层级式键名。最常用的是 database.default.* 形式:
-
database.default.hostname = "localhost"(共享主机基本都是 localhost) -
database.default.database = "yourusername_yourdbname"(注意 Namecheap 等平台生成的库名含用户名前缀) -
database.default.username = "yourusername_yourdbuser"(同理,用户也带前缀) -
database.default.password = "your_actual_password"(区分大小写,特殊字符不用转义,但要用英文双引号包住) -
database.default.DBDriver = "MySQLi"(不能写成mysql或pdo,除非你额外配了 PDO 支持)
别让其他配置干扰数据库加载
即使 .env 写对了,也可能因环境设置或路径问题被跳过:
- 确认
APP_ENV没设成testing或空值——CI4 只在development或production下才加载.env - 检查
public/index.php中是否手动调用了DotEnv::create(),或者有没有代码提前终止了加载流程 - 如果部署在 Namecheap 等共享主机,确保
.env文件没被意外上传到public/目录下(它必须在项目根,也就是public/的上一级)
验证配置是否真正起作用
光看 .env 写得漂亮没用,得确认 CI4 实际读到了它:
- 临时在控制器里加一行:
var_dump(config('Database')->default);,看输出的 hostname、database 等是否和.env一致 - 写个独立测试脚本(比如
test_db.php),用原生mysqli_connect()测试同一组账号密码能否连通——能通说明数据库本身没问题,问题一定出在 CI4 加载逻辑上 - 打开调试模式(
CI_DEBUG = true),留意错误信息里提到的是“connection refused”还是“database not found”,前者大概率是.env里的地址/端口错,后者通常是库名或权限没配对











