CodeIgniter配置修改后仍用旧值,主因是配置文件路径错误、多环境未匹配、被动态覆盖或OPcache缓存;需确认修改位置、检查ENVIRONMENT、清空cache、验证filemtime及重启PHP-FPM。

CodeIgniter 配置项改了却仍用旧值,通常不是“缓存”本身的问题,而是配置文件未被重新加载、或修改未生效、或被其他配置覆盖。它本身不带运行时配置缓存机制,但实际行为受 PHP 解析、框架加载顺序和环境影响。
确认配置文件是否真被读取
CodeIgniter(尤其是 CI3)在启动时一次性加载 application/config/ 下的配置文件,并将结果存入内部配置类(Config 类实例)。它不会自动检测文件变更,但也不会“缓存”到磁盘——问题往往出在:
- 修改的是错误路径下的文件(比如改了
app/config/而非application/config/) - 用了多环境配置(如
development/production),但当前ENVIRONMENT常量没切对,导致读的是另一套配置 - 配置被后续代码动态覆盖(例如在控制器或库中调用
$this->config->set_item())
强制让新配置生效的方法
清空
application/cache/目录下的所有.php缓存文件
CodeIgniter 有时会把某些配置(如数据库配置)或自动加载的类映射缓存成 PHP 文件。删掉这些可确保下次请求重新解析配置。-
检查
index.php中的ENVIRONMENT定义是否匹配你修改的配置文件
例如:define('ENVIRONMENT', 'development');此时系统会优先加载
application/config/development/database.php(如果存在),而非database.php主文件。 -
确保没有在运行时手动重设配置项
比如在某个库或钩子中写了:$this->config->set_item('base_url', 'https://old.example.com/');这会覆盖原始配置,需检查全局搜索
set_item或load->config()的重复调用。 -
重启 Web 服务器(仅限某些特殊部署场景)
比如启用了 OPcache 且配置文件被 OPcache 缓存(PHP 层面),此时即使文件变了,PHP 仍执行旧字节码。临时解决方式:sudo service php-fpm restart # 或 sudo systemctl restart apache2
更稳妥的是在
php.ini中设置:opcache.revalidate_freq=0 opcache.validate_timestamps=1
验证修改是否真的写入并保存
用var_dump($this->config->item('your_config_key'));在控制器里直接输出,确认值是否是你改后的;也可以加一行echo filemtime(APPPATH.'config/database.php'); die;查看文件最后修改时间是否更新。
基本上就这些。重点不在“刷新”,而在“确保改对位置 + 没被覆盖 + 没被 OPcache 锁住”。











