codeigniter 4 自动通过根目录下的 .env 文件覆盖 php 配置,支持点号分隔的多级键名(如 database.default.hostname)、布尔值直写、# 注释,优先级高于 config 类,修改后需清缓存并用 config('app')->baseurl 等验证。

CodeIgniter 4 默认通过 .env 文件覆盖框架内置配置,整个过程自动完成,无需手动加载或解析——只要文件存在、格式正确、位置准确,框架在启动时就会读取并合并到运行时配置中。
确保 .env 文件位置和命名正确
.env 必须放在项目根目录(即包含 app/、public/、system/ 的那一层),不能放在 app/ 或 public/ 下。文件名严格为 .env(开头带英文点号),不是 .env.example 或 env.php。
- 正确路径示例:
/var/www/myapp/.env - 如果用
.env.example,需先复制并重命名为.env - Apache/Nginx 不会直接暴露该文件,但需确认 Web 用户有读取权限
写法要符合 key=value 规则,且支持多级嵌套
CI4 使用点号(.)表示配置层级,比如 database.default.hostname 会自动映射到 Config\Database 类中 $default['hostname'] 的值。
- 基本格式:
app.baseURL = "https://example.com/"(等号前后可有空格) - 布尔值写
true或false,不加引号(如app.debug = true) - 数组暂不支持原生写法,复杂结构仍需在 PHP 配置类中定义
- 注释用
#开头,单独一行(如# 开发环境启用调试栏)
环境变量优先级高于 PHP 配置类
框架先加载 app/Config/*.php 中的默认值,再用 .env 逐项覆盖。这意味着你不需要修改任何 PHP 配置文件就能切换数据库、域名、密钥等。
- 例如
app/Config/App.php中$baseURL = '';,被.env中app.baseURL = "http://localhost:8080"覆盖 - 数据库配置同理:
database.default.hostname覆盖app/Config/Database.php里的$default['hostname'] - 自定义配置类(如
app/Config/MySettings.php)也支持mysettings.api_key这种写法
验证是否生效的简单方法
改完 .env 后,清空 writable/cache/ 和 writable/debugbar/(如有),然后在控制器里临时加一行:
print_r(config('App')->baseURL); // 输出 .env 中设置的值
或者查看调试工具栏(Development 模式下)的「Environment」面板,里面会列出所有从 .env 加载的变量。











