ThinkPHP 的 runtime/config.php 不自动更新,因其仅在 app_debug=false 且执行 php think config:cache 时生成;开发时设 app_debug=true 可绕过该文件,生产环境需用 config:cache 重建或 config:clear 清除后重建,并注意 OPcache 干扰。

修改 ThinkPHP 配置后,runtime/config.php 不自动更新,是因为框架只在 app_debug = false 且执行缓存命令时才生成或覆盖该文件。它不是每次请求都重写,而是静态快照。所以清理的关键不是“删了就行”,而是“删完再重建”或“绕过它”。
确认是否需要清理这个文件
先判断你当前环境是否真正依赖它:
- 如果
config/app.php中'app_debug' => true,框架会跳过runtime/config.php,直接读取原始配置文件 —— 此时删不删它都不影响生效 - 如果
app_debug = false(常见于测试/生产环境),且你已运行过php think config:cache,那runtime/config.php就是当前生效的配置源,必须更新它 - 若该文件存在但内容为空、语法错误或大小明显偏小(如不足 5KB),说明缓存生成失败,删掉后必须重新生成
三种可靠清理方式
方式一:命令行重建(推荐)
- 确保
app_debug = false,且.env中无APP_DEBUG=true覆盖 - 在项目根目录执行:
php think config:cache - 成功后
runtime/config.php会被完整重写,大小通常 ≥30KB - ⚠️ 若命令无报错但文件没更新,检查
runtime/目录权限(需可写)
方式二:手动删除 + 强制清除
立即学习“PHP免费学习笔记(深入)”;
- 先删文件:
rm -f runtime/config.php - 再清关联缓存:
php think config:clear(该命令还会清空runtime/config/子目录,并重置容器内配置实例) - 最后用
ls -la runtime/ | grep config确认无残留
方式三:开发阶段临时绕过
- 把
config/app.php中的'app_debug' => true设为true - 此时框架不再读
runtime/config.php,所有配置实时加载,改完即生效 - 上线前务必改回
false,否则性能严重下降
注意 OPcache 干扰
即使 runtime/config.php 已更新,config() 仍返回旧值?很可能是 PHP 的 OPcache 缓存了该文件的字节码:
- 执行
php think clear:config后,还需重启 PHP-FPM(如sudo systemctl restart php-fpm) - 或临时设
opcache.revalidate_freq=0,让 OPcache 每次都检查文件变更 - 验证:修改
config/app.php后,用var_dump(config('app.app_name'))测试是否实时变化



















