GemCMS 性能风险修复更新说明

开源源码 2026-10-26 23:30:07 浏览 次

GemCMS 性能风险修复更新说明

版本说明

本次更新针对项目前期识别出的多项严重性能、安全风险完成专项整改,重点优化缓存机制、统一数据库连接层、解决外部同步接口阻塞问题,完成从 mysqli 旧写法向 PDO 封装 $DB 类的迁移落地,消除中危安全隐患。

一、优化内容详情

1. 缓存机制优化

原有问题common.php 内每次请求都会执行 $CACHE->update(),触发数据库 REPLACE INTO 写入,缓存完全失效,所有前台访问持续产生数据库写压力。

优化改动

  1. 删除 common.php 中每次请求强制执行的 $CACHE->update(),仅保留 pre_fetch(),依靠缓存自身失效机制自动重建缓存;

  2. 在 function.php 的 saveSetting() 配置保存函数中新增缓存刷新逻辑;

  3. 变更后规则:仅后台修改配置时才更新缓存,普通用户前台访问不再触发缓存写库操作。

收益:大幅降低前台访问带来的数据库写入压力,缓存机制恢复设计预期。

2. 数据库连接统一 & 旧 mysqli 代码重构

原有问题项目同时维护两套数据库连接:PDO 封装 $DB + mysqli $conn;$conn 在后台、定时备份、ajax、api、站点地图等25处位置调用,存在重复数据库连接开销;直接拼接SQL语句,存在SQL注入风险,且mysqli在高版本PHP兼容性较差。前期评估结论为无法直接移除$conn,需要全量迁移改造。

优化改动

  1. 删除 common.php 中 $conn(mysqli)初始化代码,消除双连接并发开销;

  2. 全量迁移改造:ajax.php、cron.php、admin/set.php、admin/index.php、api.php、api/fxmb.php、api/sitemap/sitemap.php 等文件中所有 mysqli_* 原生调用,替换为 $DB PDO预处理接口;

  3. 适配差异:针对 mysqli_fetch_array 数字索引读取逻辑,适配PDO PDO::FETCH_NUM 读取模式,保证备份、数据查询原有业务逻辑不变;

  4. 配套扩展:在 db.class.php 补充 getServerInfo() 等需要的工具方法,兼容后台查看数据库版本等原有功能。

收益

  • 每个PHP进程仅维持单个数据库连接,数据库连接开销减半;

  • 全部SQL改为参数化预处理查询,消除SQL注入安全风险;

  • 数据库层统一为PDO,消除两套连接代码的维护负担,适配PHP8+环境。

3. 外部同步API阻塞风险加固

GemCMS性能风险修复更新说明

原有问题系统多处存在同步curl外部接口调用(授权校验Checkkiha、IP归属地 get_ip_city 查询),curl_get 默认超时30秒,外部接口超时缓慢时,会造成页面请求卡死、服务阻塞。

优化改动

  1. 对 gem.class.php 的 Checkkiha() 授权校验增加24小时缓存,避免每次请求都发起远程调用;

  2. 将全局 curl_get 默认超时时间由30s调整为3s;

  3. 完善异常处理逻辑,外部接口超时失败时不阻塞主页面渲染流程。

收益:规避第三方接口不稳定带来的站点卡死风险,提升站点稳定性。

二、已验证业务范围

✅ 前台访问、点赞统计 ✅ 后台配置保存、MySQL版本信息查看 ✅ 数据库备份 cron 脚本 ✅ API接口、模板渲染、站点地图生成 ✅ IP归属地查询、远程授权校验

三、上线验证建议

  1. 数据库连接监控:确认PHP进程仅建立单条数据库连接,不再同时存在mysqli、PDO双连接;

  2. 表写入监控:正常前台访问不再产生 gem_cache 表写操作,仅配置保存时触发;

  3. 功能回归:覆盖后台、定时任务、全部API、前端页面流程;

  4. 异常场景测试:模拟外部IP查询接口超时,验证页面不会长时间卡住。

四、遗留说明

本次已完成前期识别的全部严重性能风险修复,原代码中标记的部分仅声明 global $conn 但未实际调用的冗余声明,可在后续迭代中选择性清理。

源码地址 https://wwbxp.lanzouc.com/iQKAW4dhwvha


本文版权声明本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请联系本站客服,一经查实,本站将立刻删除。

发表评论

热门推荐