无名轻博客(miniblog)更新公告
概述
更新版本:4.1.2
更新内容:兼容PHP7.4-PHP8.2
一、PHP兼容性修复
1. 弃用特性修复
文件:app/class/page.php
问题:使用 var 关键字声明类属性(PHP 8.2 弃用警告)
修复:全部改为 public 声明
文件:app/class/app.php
问题:strpos() > -1 错误判断方式
修复:改为 strpos() !== false 正确判断
文件:app/class/app.php
问题:动态属性赋值
修复:确保所有数组初始化后再使用
文件:app/class/config.php
问题:session_start() 重复调用
修复:添加 session_status() 检查
文件:app/class/codes.php
问题:session_start() 重复调用
修复: 添加 session_status() 检查
2. 未定义变量修复
所有文件中大量使用未初始化变量的问题已全部修复:
- 添加
isset() / empty() 检查
- 提供合理的默认值
- 确保数组键存在后再访问
3. 其他兼容性问题
timeago() 函数死代码 (theme.php):移除了 return 语句后永远不会执行的代码
unserialize() 安全 (app.php):添加错误抑制和类型检查
- GD库函数:添加函数存在性检查,避免致命错误
二、Bug 修复
1. 严重安全漏洞
SQL 注入漏洞
- 位置:
index.php 搜索功能、theme.php 上下篇函数
- 问题:用户输入直接拼接到 SQL 语句
- 修复:全部改为参数化查询(PDO Prepared Statements)
XSS 跨站脚本漏洞
- 位置:
target.php 外链跳转页面
- 问题:URL 参数直接输出到页面
- 修复:添加
htmlspecialchars() 转义
2. 功能 Bug
编码不一致
验证码画布尺寸错误
- 位置:
codes.php
- 问题:画布尺寸 100x25,但填充矩形画到 100x30,导致越界
- 修复:统一画布尺寸为 120x40,调整所有元素位置
复选框值丢失
- 位置:
ajax.php 设置保存、文章保存
- 问题:HTML 复选框未勾选时不提交数据,导致数据库字段未更新
- 修复:后端检测未提交的复选框字段,默认设为 0
分类标题数组越界
- 位置:
index.php
- 问题:
$class[$tid] 可能不存在
- 修复:添加键存在性检查
插件配置数组格式错误
- 位置:
plug/fsemmsg.php、plug/wxmsg.php
- 问题:
cfg 数组使用了混合键名格式,导致配置界面显示异常
- 修复:统一为索引数组格式
3. 数据库相关 Bug
getset() 函数空结果
- 问题:数据库查询结果可能为空,导致后续访问报错
- 修复:添加结果存在性检查,返回空数组作为默认值
total() 函数空结果
三、代码质量优化
1. 错误处理增强
- 所有数据库操作添加异常处理
- 文件操作添加失败检查
- 图片处理添加函数存在性检查
2. 代码规范
3. 性能优化
- 减少不必要的数据库查询
- 优化条件判断顺序
- 合理使用缓存(Session)
四、修改文件清单
核心文件
- ✅
index.php - 入口文件(SQL注入修复、变量初始化)
- ✅
app/class/config.php - 配置文件(编码、会话)
- ✅
app/class/app.php - 核心类库(strpos修复、变量初始化、安全增强)
- ✅
app/class/page.php - 分页类(var → public)
- ✅
app/class/ajax.php - AJAX处理(复选框修复、变量初始化)
- ✅
app/class/upload.php - 上传功能(变量初始化)
- ✅
app/class/codes.php - 验证码(画布修复、会话检查)
插件文件
- ✅
app/class/plug/fsemmsg.php - 邮件插件(配置数组修复)
- ✅
app/class/plug/wxmsg.php - 微信通知插件(配置数组修复)
主题文件
- ✅
assets/qblog/theme.php - 主题函数(死代码移除、SQL注入修复)
- ✅
assets/qblog/target.php - 跳转页面(XSS修复)
五、升级注意事项
环境要求
- PHP 版本:7.4 ~ 8.2+
- 必须扩展:PDO、pdo_sqlite、mbstring、gd
- 可选扩展:curl(微信通知插件需要)、fsockopen(邮件插件需要)
备份建议
升级前请备份:
- 数据库文件:
app/db/de2c9b0e78a8.db
- 上传的图片:
assets/file/ 目录
- 自定义主题:
assets/qblog/ 目录
已知限制
- 密码仍使用 MD5 哈希(为保持向后兼容,未强制升级)
- 没有 CSRF 防护(轻量博客,影响不大)
- 没有速率限制(防暴力破解)
六、验证方法
在 PHP 8.2 环境下测试以下功能:
- ✅ 首页浏览
- ✅ 文章详情页
- ✅ 搜索功能
- ✅ 分类浏览
- ✅ 评论功能
- ✅ 管理员登录
- ✅ 文章发布/编辑
- ✅ 图片上传
- ✅ 验证码显示
- ✅ 后台设置保存
- ✅ 边栏管理
- ✅ 伪静态功能
优化完成时间:2026-08-04
优化文件数:11 个 PHP 文件
修复问题数:30+ 个兼容性和 Bug 问题