Lume 1.0 今日修改与优化记录 (2026-06-19)
=====================================================
一、后台优化设置页 (admin_optimization.php)
--------------------------------------------------
1. 新建「优化设置」独立后台页面,集中管理所有站长可调的优化项
2. 从 admin.php 中移除「全局字体大小」「热门帖子」「用户编辑帖子」三个独立区块,
统一归入优化设置页
3. admin.php 顶部导航新增「优化设置」按钮
4. 优化设置页包含以下区块:
- 页面缓存:首页/版块列表 TTL、帖子详情页 TTL、缓存文件数统计 + 清理入口
- Gzip 压缩:开关
- 数据库:持久连接开关、读写分离(读库地址配置)
- 查询缓存:开关 + TTL 配置
- 图片优化 · WebP(诊断):GD 版本检测、imagewebp 函数检测、WebP 开关状态、
原始图片/WebP 副本数量统计、webp 目录权限检查、补生成全部 WebP 按钮
- 全局字体大小:6 个区域独立字号控制
- 热门帖子:回复数阈值配置
- 用户编辑帖子:开关
5. 页面布局经过多次修复:
- 第一次修复:使用 <section class="card admin-card-compact"> 标准卡片样式
- 第二次修复:全局 CSS 中新增 input[type="checkbox"] 专属样式,
修复 checkbox 被 width:100% 撑满导致文字竖排的问题
二、大型网站 / 高并发性能优化
--------------------------------------------------
1. Gzip 输出压缩
- 文件:db.php
- 使用 ob_gzhandler 压缩 HTML 输出,减少 60-80% 传输体积
- 智能跳过 AJAX/JSON 请求
- 后台可开关(gzip_enabled 设置)
2. 会话写锁优化
- 文件:db.php、header.php
- 游客页面在 header.php 读取完会话后立即 session_write_close()
- 避免同一用户并发请求相互阻塞
- 登录用户不受影响
3. 数据库读写分离
- 文件:db.php
- 新增 db_read() 函数用于 SELECT 查询
- 新增 db_write() 函数用于 INSERT/UPDATE/DELETE
- 未配置从库时,db_read() 自动复用主库连接
- 从库不可用时自动回退到主库
- 后台可配置读库地址(qf_db_set_read_host)
4. 查询结果缓存
- 文件:db.php
- 文件级 JSON 缓存热点 SQL 查询结果
- 缓存位置:data/qcache/
- 可配置 TTL(默认 60 秒)
- 发帖/回帖后自动清除(qf_cache_clear_all 同时清除查询缓存)
- 后台可开关 + TTL 配置
5. 持久连接动态开关
- 文件:db.php
- 新增 qf_db_persistent() / qf_db_set_persistent() 函数
- 持久连接不再依赖 config.php 硬编码,改为后台动态开关
- 配置存储在 data/db_config.json
三、WebP 图片优化(完整修复链)
--------------------------------------------------
1. 开关检查修复
- 文件:ajax_upload_image.php
- 添加 qf_setting('webp_enabled') 检查,只有开关开启时才生成 WebP
2. 前端显示修复
- 文件:db.php(新增 qf_webp_url 函数)
- 文件:thread.php(新增 qf_render_picture 函数)
- 使用 <picture> 标签优先加载 WebP:
<picture>
<source srcset="uploads/webp/xxx.webp" type="image/webp">
<img src="xxx.jpg" alt="..." loading="lazy">
</picture>
- 浏览器支持 WebP 时自动加载 WebP,不支持时回退原图
- 同时修复了帖子内容中 [img] BBCode 的渲染(db.php qf_render_content)
3. 补生成功能
- 文件:admin_optimization.php
- 新增「补生成全部 WebP」按钮
- 为所有已上传的 JPG/PNG/GIF 图片批量生成 WebP 副本
- 已有 WebP 的自动跳过
4. 写入失败修复
- 文件:admin_optimization.php、ajax_upload_image.php
- 去掉 imagewebp() 前面的 @ 抑制符
- 返回值检查:成功才计数,失败时清理残留文件
- 新增目录权限检查:webp 目录是否存在、是否可写
- 新增失败计数和错误提示
5. GLOB_BRACE 兼容性修复
- 文件:admin_optimization.php
- 替换 GLOB_BRACE 为逐个扩展名 glob,避免部分系统不支持
6. 诊断面板
- 文件:admin_optimization.php
- 实时显示 GD 版本、imagewebp 函数状态、WebP 开关状态、
原始图片数量、WebP 副本数量、webp 目录存在性和权限
- 根据诊断结果自动显示操作指引(安装扩展/开启开关/补生成)
四、全局 CSS 修复
--------------------------------------------------
1. checkbox/radio 样式修复
- 文件:assets/style.css
- 全局 input 样式 width:100% 影响了 checkbox 和 radio
- 新增专属样式覆盖:
input[type="checkbox"], input[type="radio"] {
width: auto;
padding: 0;
margin: 0 6px 0 0;
border: none;
border-radius: 0;
vertical-align: middle;
}
- 这是全局修复,网站所有 checkbox 都会受益
2. 新增 .opt-diag 诊断提示样式
- 文件:assets/style.css
- 黄色背景警告框样式,用于 WebP 诊断提示
五、图片徽章修复
--------------------------------------------------
1. 问题:编辑器图片按钮上传的图片通过 [img] BBCode 嵌入帖子内容,
不走 qf_attachments 表,导致帖子列表「图」徽章不显示
2. 修复文件:index.php、forum.php、search.php(3 个文件,4 个查询)
3. has_image 子查询新增 t.content LIKE '%[img]%' 判断:
- 优先级 1:qf_attachments 表有图片记录
- 优先级 2:帖子内容包含 [img] 标签
- 优先级 3:都没有
六、登录 CSRF 令牌修复
--------------------------------------------------
1. 问题:session_write_close 优化导致 CSRF 令牌初始化在 session 关闭后执行,
写入静默失败,下次请求令牌不匹配,触发 CSRF 错误
2. 修复文件:db.php
3. 在 session_start() 之后立即调用 qf_csrf_token(),
确保令牌在 session 关闭前已持久化
4. 只需一行代码修复
七、新增默认设置
--------------------------------------------------
1. install.php 新增默认设置:
- webp_enabled => '1'
- query_cache_enabled => '1'
- query_cache_ttl => '60'
- gzip_enabled => '1'
2. upgrade.php 新增默认设置:
- 同上,确保升级用户也能获得新设置
八、Lume 宣传页面
--------------------------------------------------
1. 新建 lume-landing.html,包含:
- Hero 封面(品牌数据展示)
- 性能优势(4 指标 + ECharts 柱状图 + 10 层优化表)
- 安全防护(10 项安全能力卡片)
- 功能特性(12 张功能卡片)
- 后台管理(双列展示)
- 优化贡献度(ECharts 环形图)
- 站长优化建议(10 条实操建议)
- 技术对比(12 维度对比表)
- CTA 行动号召
2. 使用 IBM Plex Serif + GeistMono 字体,深蓝 + 翠绿配色
3. 响应式设计,支持移动端
九、全部改动文件清单
--------------------------------------------------
| 文件 | 改动类型 |
|------------------------------|-------------|
| db.php | 核心优化 |
| admin_optimization.php | 新建 |
| admin.php | 修改 |
| admin_cache.php | 修改 |
| header.php | 修改 |
| thread.php | 修改 |
| index.php | 修改 |
| forum.php | 修改 |
| search.php | 修改 |
| ajax_upload_image.php | 修改 |
| assets/style.css | 修改 |
| install.php | 修改 |
| upgrade.php | 修改 |
| lume-landing.html | 新建 |
十、优化成果总览
--------------------------------------------------
| 维度 | 优化项 |
|-------------|----------------------------------------|
| 传输优化 | Gzip 压缩(60-80%)、WebP 图片(30-50%) |
| 缓存层 | 页面缓存、查询缓存、OPcache |
| 数据库 | 持久连接、读写分离、复合索引、全文索引 |
| 并发优化 | 会话锁优化、读写分离 |
| 安全防护 | CSRF、XSS、SQL注入、CC防护、登录爆破等9层 |
| 后台管理 | 14 个子页面,全部可配置可开关 |
| 图片优化 | WebP 自动生成 + <picture> 标签 + 诊断 |
| 搜索 | FULLTEXT 全文索引 |
| 部署 | 5 分钟 install.php + 增量 upgrade.php |
=====================================================
一、后台优化设置页 (admin_optimization.php)
--------------------------------------------------
1. 新建「优化设置」独立后台页面,集中管理所有站长可调的优化项
2. 从 admin.php 中移除「全局字体大小」「热门帖子」「用户编辑帖子」三个独立区块,
统一归入优化设置页
3. admin.php 顶部导航新增「优化设置」按钮
4. 优化设置页包含以下区块:
- 页面缓存:首页/版块列表 TTL、帖子详情页 TTL、缓存文件数统计 + 清理入口
- Gzip 压缩:开关
- 数据库:持久连接开关、读写分离(读库地址配置)
- 查询缓存:开关 + TTL 配置
- 图片优化 · WebP(诊断):GD 版本检测、imagewebp 函数检测、WebP 开关状态、
原始图片/WebP 副本数量统计、webp 目录权限检查、补生成全部 WebP 按钮
- 全局字体大小:6 个区域独立字号控制
- 热门帖子:回复数阈值配置
- 用户编辑帖子:开关
5. 页面布局经过多次修复:
- 第一次修复:使用 <section class="card admin-card-compact"> 标准卡片样式
- 第二次修复:全局 CSS 中新增 input[type="checkbox"] 专属样式,
修复 checkbox 被 width:100% 撑满导致文字竖排的问题
二、大型网站 / 高并发性能优化
--------------------------------------------------
1. Gzip 输出压缩
- 文件:db.php
- 使用 ob_gzhandler 压缩 HTML 输出,减少 60-80% 传输体积
- 智能跳过 AJAX/JSON 请求
- 后台可开关(gzip_enabled 设置)
2. 会话写锁优化
- 文件:db.php、header.php
- 游客页面在 header.php 读取完会话后立即 session_write_close()
- 避免同一用户并发请求相互阻塞
- 登录用户不受影响
3. 数据库读写分离
- 文件:db.php
- 新增 db_read() 函数用于 SELECT 查询
- 新增 db_write() 函数用于 INSERT/UPDATE/DELETE
- 未配置从库时,db_read() 自动复用主库连接
- 从库不可用时自动回退到主库
- 后台可配置读库地址(qf_db_set_read_host)
4. 查询结果缓存
- 文件:db.php
- 文件级 JSON 缓存热点 SQL 查询结果
- 缓存位置:data/qcache/
- 可配置 TTL(默认 60 秒)
- 发帖/回帖后自动清除(qf_cache_clear_all 同时清除查询缓存)
- 后台可开关 + TTL 配置
5. 持久连接动态开关
- 文件:db.php
- 新增 qf_db_persistent() / qf_db_set_persistent() 函数
- 持久连接不再依赖 config.php 硬编码,改为后台动态开关
- 配置存储在 data/db_config.json
三、WebP 图片优化(完整修复链)
--------------------------------------------------
1. 开关检查修复
- 文件:ajax_upload_image.php
- 添加 qf_setting('webp_enabled') 检查,只有开关开启时才生成 WebP
2. 前端显示修复
- 文件:db.php(新增 qf_webp_url 函数)
- 文件:thread.php(新增 qf_render_picture 函数)
- 使用 <picture> 标签优先加载 WebP:
<picture>
<source srcset="uploads/webp/xxx.webp" type="image/webp">
<img src="xxx.jpg" alt="..." loading="lazy">
</picture>
- 浏览器支持 WebP 时自动加载 WebP,不支持时回退原图
- 同时修复了帖子内容中 [img] BBCode 的渲染(db.php qf_render_content)
3. 补生成功能
- 文件:admin_optimization.php
- 新增「补生成全部 WebP」按钮
- 为所有已上传的 JPG/PNG/GIF 图片批量生成 WebP 副本
- 已有 WebP 的自动跳过
4. 写入失败修复
- 文件:admin_optimization.php、ajax_upload_image.php
- 去掉 imagewebp() 前面的 @ 抑制符
- 返回值检查:成功才计数,失败时清理残留文件
- 新增目录权限检查:webp 目录是否存在、是否可写
- 新增失败计数和错误提示
5. GLOB_BRACE 兼容性修复
- 文件:admin_optimization.php
- 替换 GLOB_BRACE 为逐个扩展名 glob,避免部分系统不支持
6. 诊断面板
- 文件:admin_optimization.php
- 实时显示 GD 版本、imagewebp 函数状态、WebP 开关状态、
原始图片数量、WebP 副本数量、webp 目录存在性和权限
- 根据诊断结果自动显示操作指引(安装扩展/开启开关/补生成)
四、全局 CSS 修复
--------------------------------------------------
1. checkbox/radio 样式修复
- 文件:assets/style.css
- 全局 input 样式 width:100% 影响了 checkbox 和 radio
- 新增专属样式覆盖:
input[type="checkbox"], input[type="radio"] {
width: auto;
padding: 0;
margin: 0 6px 0 0;
border: none;
border-radius: 0;
vertical-align: middle;
}
- 这是全局修复,网站所有 checkbox 都会受益
2. 新增 .opt-diag 诊断提示样式
- 文件:assets/style.css
- 黄色背景警告框样式,用于 WebP 诊断提示
五、图片徽章修复
--------------------------------------------------
1. 问题:编辑器图片按钮上传的图片通过 [img] BBCode 嵌入帖子内容,
不走 qf_attachments 表,导致帖子列表「图」徽章不显示
2. 修复文件:index.php、forum.php、search.php(3 个文件,4 个查询)
3. has_image 子查询新增 t.content LIKE '%[img]%' 判断:
- 优先级 1:qf_attachments 表有图片记录
- 优先级 2:帖子内容包含 [img] 标签
- 优先级 3:都没有
六、登录 CSRF 令牌修复
--------------------------------------------------
1. 问题:session_write_close 优化导致 CSRF 令牌初始化在 session 关闭后执行,
写入静默失败,下次请求令牌不匹配,触发 CSRF 错误
2. 修复文件:db.php
3. 在 session_start() 之后立即调用 qf_csrf_token(),
确保令牌在 session 关闭前已持久化
4. 只需一行代码修复
七、新增默认设置
--------------------------------------------------
1. install.php 新增默认设置:
- webp_enabled => '1'
- query_cache_enabled => '1'
- query_cache_ttl => '60'
- gzip_enabled => '1'
2. upgrade.php 新增默认设置:
- 同上,确保升级用户也能获得新设置
八、Lume 宣传页面
--------------------------------------------------
1. 新建 lume-landing.html,包含:
- Hero 封面(品牌数据展示)
- 性能优势(4 指标 + ECharts 柱状图 + 10 层优化表)
- 安全防护(10 项安全能力卡片)
- 功能特性(12 张功能卡片)
- 后台管理(双列展示)
- 优化贡献度(ECharts 环形图)
- 站长优化建议(10 条实操建议)
- 技术对比(12 维度对比表)
- CTA 行动号召
2. 使用 IBM Plex Serif + GeistMono 字体,深蓝 + 翠绿配色
3. 响应式设计,支持移动端
九、全部改动文件清单
--------------------------------------------------
| 文件 | 改动类型 |
|------------------------------|-------------|
| db.php | 核心优化 |
| admin_optimization.php | 新建 |
| admin.php | 修改 |
| admin_cache.php | 修改 |
| header.php | 修改 |
| thread.php | 修改 |
| index.php | 修改 |
| forum.php | 修改 |
| search.php | 修改 |
| ajax_upload_image.php | 修改 |
| assets/style.css | 修改 |
| install.php | 修改 |
| upgrade.php | 修改 |
| lume-landing.html | 新建 |
十、优化成果总览
--------------------------------------------------
| 维度 | 优化项 |
|-------------|----------------------------------------|
| 传输优化 | Gzip 压缩(60-80%)、WebP 图片(30-50%) |
| 缓存层 | 页面缓存、查询缓存、OPcache |
| 数据库 | 持久连接、读写分离、复合索引、全文索引 |
| 并发优化 | 会话锁优化、读写分离 |
| 安全防护 | CSRF、XSS、SQL注入、CC防护、登录爆破等9层 |
| 后台管理 | 14 个子页面,全部可配置可开关 |
| 图片优化 | WebP 自动生成 + <picture> 标签 + 诊断 |
| 搜索 | FULLTEXT 全文索引 |
| 部署 | 5 分钟 install.php + 增量 upgrade.php |