MyBlog 改进计划
目标
将 myblog 改进为生产级别的博客系统,提高代码质量、安全性、性能和用户体验。
当前状态
- 版本: v2.1
- 已完成: 安全类实现、代码重构、命名空间引入、测试基础设施配置
- 待完成: 测试用例编写、安全功能集成验证、文档完善、历史文档清理
- 技术栈: PHP 8.3 + Markdown + KaTeX + highlight.js
- 代码结构: 已重构为模块化结构,使用 PSR-4 自动加载
阶段 1: 安全性修复(优先级:高)
1.1 XSS 漏洞修复
文件: blog/src/Parser/Parsedown.php</code>, <code>blog/src/Renderer/BlogRenderer.php
任务清单:
- [x] 统一安全模式:确保所有渲染都通过
setSafeMode(true)✅ - [x] 添加自定义输出过滤器 ✅ (
SecurityFilter类已实现) - [x] 验证所有HTML输出都经过转义 ✅ (在 BlogRenderer 中实现)
- [x] 添加安全测试用例 ✅
预期产出:
- ✅
Parsedown.php增强的安全模式(已配置) - ✅
SecurityFilter类(已实现) - ✅ 单元测试文件
tests/Unit/SecurityFilterTest.php(已完成,52 测试通过)
1.2 路径遍历漏洞修复
文件: _blog/config.php
任务清单:
- [x] 添加路径验证函数 ✅ (
PathValidator类已实现) - [x] 在所有文件操作前验证路径 ✅ (已在 config.php 中集成)
- [x] 添加路径遍历测试用例 ✅
- [x] 更新错误处理,返回安全错误信息 ✅
预期产出:
- ✅
PathValidator类(已实现) - ✅ 修复后的文件访问逻辑(已集成)
- ✅ 单元测试文件
tests/Unit/PathValidatorTest.php(已完成)
1.3 输入验证
文件: index.php, blog/templatearticle.php, blog/templateindex.php
任务清单:
- [x] 创建
InputValidator类 ✅ (已创建) - [x] 验证所有URL参数 ✅ (InputValidator::getRequestParam 已实现)
- [x] 验证文件路径 ✅ (通过 PathValidator)
- [ ] 添加输入过滤中间件(可选,当前通过直接调用已满足需求)
预期产出:
- ✅
InputValidator类(已实现并测试) - ✅ 验证方法(已实现)
- ✅ 测试用例
tests/Unit/InputValidatorTest.php(已完成)
1.4 CSRF 保护
文件: _blog/src/Security/CSRFProtection.php
任务清单:
- [x] 实现
CSRFProtection类 ✅ - [x] 添加 token 生成和验证 ✅
- [ ] 在表单中添加 CSRF token(如有表单需要时添加)
- [x] 添加CSRF测试 ✅
预期产出:
- ✅
CSRFProtection类(已实现) - ✅ 测试用例
tests/Unit/CSRFProtectionTest.php(已完成) - [ ] 更新的表单模板(按需添加)
阶段 2: 代码重构(优先级:高)
2.1 消除代码重复
文件: blog/config.php</code>, <code>blog/Renderer.php
任务清单:
- [ ] 将
generateIndexHtml()从 config.php 移到 Renderer.php - [ ] 统一使用
BlogRenderer::renderIndex() - [ ] 删除重复代码
- [ ] 添加回归测试
预期产出:
- 清理后的
config.php - 统一的渲染接口
- 测试用例
2.2 引入命名空间
文件: 所有 _blog/ 目录下的 PHP 文件
任务清单:
- [x] 定义命名空间
Blog\Renderer,Blog\Parser,Blog\Security等 ✅ - [x] 更新所有类定义 ✅
- [x] 更新所有
use语句 ✅ - [x] 更新 composer.json ✅ (已配置 PSR-4 自动加载)
预期产出:
- ✅ 带命名空间的代码(已完成)
- ✅ 更新的导入语句(已完成)
- [ ] 兼容性测试(待验证)
2.3 代码组织优化
文件: 新的目录结构
任务清单:
- [x] 创建
_blog/src/目录存放源码 ✅ - [x] 创建
_blog/helpers/目录存放辅助函数 ✅ - [ ] 创建
_blog/services/目录存放服务类(待需要时创建) - [x] 移动文件到新结构 ✅
- [x] 更新所有导入路径 ✅
预期产出:
_blog/
├── src/
│ ├── Renderer/
│ │ ├── BlogRenderer.php
│ │ └── BlogContentProcessor.php
│ ├── Parser/
│ │ └── Parsedown.php
│ ├── Security/
│ │ ├── SecurityFilter.php
│ │ ├── PathValidator.php
│ │ └── CSRFProtection.php
│ └── Services/
│ └── CacheService.php
├── helpers/
│ ├── FileHelper.php
│ └── PathHelper.php
├── config.php
└── style.css
2.4 添加 PSR-12 代码风格
任务清单:
- [x] 安装 PHP CS Fixer ✅
- [x] 配置 .php-cs-fixer.php ✅
- [x] 运行代码格式化 ✅(代码已符合 PSR-12)
- [x] 添加 Git pre-commit hook ✅
预期产出:
- ✅
.php-cs-fixer.php配置文件(已完成) - ✅ 格式化后的代码(已符合标准)
- ✅ Git hook 脚本(.git/hooks/pre-commit)
阶段 3: 测试基础设施(优先级:高)
3.1 设置 PHPUnit
任务清单:
- [x] 安装 PHPUnit ✅ (已在 composer.json 中配置)
- [x] 创建
phpunit.xml配置 ✅ - [x] 创建
tests/目录结构 ✅ - [x] 编写第一个测试 ✅
预期产出:
- ✅
phpunit.xml配置(已完成) - ✅
tests/目录(已完善) - ✅ 基础测试框架(bootstrap.php 和测试用例已完成,52 测试全部通过)
3.2 编写单元测试
文件: 创建 tests/Unit/
任务清单:
- [x] 测试
BlogRenderer类 ✅ (已完善,添加了 LaTeX、配置、安全转义等测试) - [x] 测试
BlogContentProcessor类 ✅ (已完善,添加了 YAML front matter、TOC、文件处理等测试) - [ ] 测试
Parsedown类(可选,Parsedown 是第三方库的封装) - [x] 测试安全相关类 ✅ (SecurityFilter, PathValidator, InputValidator, CSRFProtection 已完成)
预期产出:
- ✅
tests/Unit/Blog/Renderer/BlogRendererTest.php(已完善,25+ 测试用例) - ✅
tests/Unit/Blog/Renderer/BlogContentProcessorTest.php(已完善,20+ 测试用例) - [ ]
tests/Unit/ParsedownTest.php(可选) - ✅
tests/Unit/SecurityTest.php及相关测试(已完成,52 测试通过)
3.3 编写集成测试
文件: 创建 tests/Integration/
任务清单:
- [x] 测试完整的渲染流程 ✅ (RenderFlowTest.php 已存在并完善)
- [x] 测试文件扫描和生成 ✅ (FileScanTest.php 已创建)
- [x] 测试缓存机制 ✅ (CacheTest.php 已创建)
预期产出:
- ✅
tests/Integration/RenderFlowTest.php(已存在,5 个测试用例) - ✅
tests/Integration/FileScanTest.php(已创建,13 个测试用例) - ✅
tests/Integration/CacheTest.php(已创建,8 个测试用例)
3.4 添加测试覆盖率报告
任务清单:
- [ ] 安装 Xdebug
- [ ] 配置 PHPUnit 覆盖率
- [ ] 生成覆盖率报告
- [ ] 设定覆盖率目标(80%+)
预期产出:
- 覆盖率配置
- 覆盖率报告脚本
- CI/CD 集成
阶段 4: 文档完善(优先级:高)
4.1 更新 README.md
任务清单:
- [x] 添加项目介绍 ✅
- [x] 添加功能列表 ✅
- [x] 添加安装说明 ✅
- [x] 添加使用指南 ✅
- [x] 添加部署指南 ✅
- [x] 添加贡献指南 ✅
- [x] 添加许可证信息 ✅
预期产出:
- ✅ 完整的
README.md(已完成,包含项目介绍、功能列表、安装说明、使用指南、部署指南、贡献指南等)
4.2 创建开发文档
文件: 创建 docs/ 目录
任务清单:
- [x] 创建架构设计文档 ✅
- [ ] 创建API文档
- [x] 创建配置指南 ✅
- [x] 创建故障排查指南 ✅
- [x] 创建性能优化指南 ✅
预期产出:
- ✅
docs/ARCHITECTURE.md(已完成) - [ ]
docs/API.md(待完成) - ✅
docs/CONFIGURATION.md(已完成) - ✅
docs/TROUBLESHOOTING.md(已完成) - ✅
docs/PERFORMANCE.md(已完成)
4.3 代码注释
任务清单:
- [x] 为所有类添加 DocBlock 注释 ✅ (所有主要类已添加完整注释)
- [x] 为所有公共方法添加参数和返回值注释 ✅ (主要类的方法已完善)
- [x] 为复杂逻辑添加内联注释 ✅ (部分已完成)
- [x] 创建 Front Matter 自动添加脚本 ✅ (addfrontmatter.php)
- [ ] 生成 API 文档(使用 phpDocumentor)
预期产出:
- ✅ BlogRenderer 类完整注释(已完成,包含类描述、属性注释、方法注释)
- ✅ BlogContentProcessor 类完整注释(已完成,171 行,包含所有方法注释)
- ✅ Security 类的完整注释(已完成:SecurityFilter, PathValidator, InputValidator, CSRFProtection)
- [ ]
docs/API.html(生成的文档,待完成)
4.4 清理历史文档
任务清单:
- [x] 归档或删除 UPGRADE_SUMMARY.md ✅
- [x] 归档或删除 FINAL_STATUS.md ✅
- [x] 归档或删除 FIX_INSTRUCTIONS.md ✅
- [x] 归档或删除 LATEXFIXREPORT.md ✅
- [x] 归档或删除 CODEHIGHLIGHTUPGRADE.md ✅
- [x] 创建 CHANGELOG.md 记录版本历史 ✅
预期产出:
- ✅ 清理后的根目录(16 个历史文档已归档)
- ✅
CHANGELOG.md(已创建) - ✅
archive/目录(已创建并存放旧文档)
阶段 5: 性能优化(优先级:中)
5.1 添加缓存机制
文件: 创建 _blog/src/Services/CacheService.php
任务清单:
- [x] 实现
CacheService类 ✅ - [x] 支持文件缓存 ✅
- [x] 支持 Redis 缓存 ✅(默认使用 127.0.0.1:6379)
- [x] 缓存渲染后的HTML ✅(已集成到 BlogRenderer 和 BlogContentProcessor)
- [x] 实现缓存失效策略 ✅(基于文件修改时间和 TTL)
- [x] 添加缓存命中率监控 ✅
- [x] 编写单元测试 ✅(包含自动探测功能测试)
- [x] 在 config.php 中传递 sourceFile/sourceDir 参数 ✅(已集成)
预期产出:
- ✅
CacheService类(已完成,支持文件缓存和 Redis 缓存,自动探测) - ✅
CacheServiceTest类(已完成,34 个测试用例,包含自动探测测试) - [ ] 缓存配置(待完成)
- ✅ 性能监控指标(已实现统计功能)
缓存类型:
null(默认): 自动探测,如果 Redis 可用则优先使用 Redis,否则使用文件缓存file: 仅使用文件缓存redis: 仅使用 Redis 缓存(需要 PHP Redis 扩展)both: 同时使用文件和 Redis(Redis 优先,文件作为后备)
自动探测机制:
- 自动检测本地 Redis 服务器(127.0.0.1:6379)
- 如果 Redis 可用,优先使用 Redis 缓存
- 如果 Redis 不可用,自动使用文件缓存
- 连接超时:1秒(避免阻塞)
5.2 资源压缩和优化
任务清单:
- [ ] CSS 和 JavaScript 压缩
- [ ] 实现资源合并(合并 CSS/JS 文件)
- [ ] 添加版本号控制(防止缓存问题)
- [ ] 实现资源懒加载
预期产出:
- 压缩后的资源文件
- 资源合并脚本
- 版本控制机制
5.3 CDN 优化
任务清单:
- [x] 为 CDN 资源添加版本号 ✅
- [x] 考虑使用 CDN 备份源 ✅(cdnjs 作为备用)
- [x] 添加 CDN 加载失败的回退方案 ✅
预期产出:
- ✅ 版本化的 CDN 链接(使用 ASSET_VERSION)
- ✅ 回退机制代码(JavaScript 和 HTML onerror 处理)
5.4 图片优化
任务清单:
- [x] 为图片添加 lazy loading ✅
- [ ] 创建图片压缩脚本
- [ ] 支持现代图片格式(WebP, AVIF)
- [ ] 添加响应式图片(srcset)
预期产出:
- ✅ 图片 lazy loading(已集成到 BlogRenderer::optimizeImages)
- [ ] 图片优化脚本(待完成)
- [ ] 更新的 Markdown 渲染逻辑(部分完成)
阶段 6: 功能增强(优先级:中)
6.1 搜索功能
任务清单:
- [ ] 设计搜索索引结构,基于RediSearch (默认本地redis server)
- [ ] 实现索引生成脚本
- [ ] 创建搜索 UI
- [ ] 实现搜索逻辑(全文搜索)
- [ ] 添加搜索结果高亮
- [ ] 添加搜索历史
预期产出:
search.php(搜索页面)index_search.php(索引生成脚本)- 搜索 UI 组件
6.2 站点地图(sitemap.xml)
文件: 创建 sitemap.php
任务清单:
- [x] 实现 sitemap.xml 生成 ✅
- [x] 支持多级目录 ✅
- [x] 添加 lastmod 时间戳 ✅
- [ ] 添加 sitemap 提交到搜索引擎(需手动配置)
预期产出:
- ✅
sitemap.php(动态生成 sitemap.xml) - ✅
robots.txt更新
6.3 RSS 订阅
不需要RSS.
6.4 暗色模式
任务清单:
- [ ] 设计暗色配色方案
- [ ] 实现 CSS 变量
- [ ] 添加切换按钮
- [ ] 保存用户偏好(localStorage)
- [ ] 支持系统偏好自动切换
预期产出:
- 带暗色模式的 CSS
- 切换按钮组件
- 偏好保存逻辑
6.5 标签系统
任务清单:
- [x] 设计标签数据结构 ✅
- [x] 添加 frontmatter 解析 ✅
- [x] 实现标签索引 ✅
- [x] 创建标签页面 ✅
- [x] 添加标签云 ✅
预期产出:
- ✅
tags.php(标签列表,带标签云) - ✅
tag.php(单个标签页面) - ✅ 标签解析逻辑(支持数组和逗号分隔格式)
6.6 评论系统(可选)
任务清单:
- [x] 选择评论系统(giscus) ✅
- [x] 集成到模板 ✅
- [x] 配置评论区 ✅
预期产出:
- ✅ 集成的评论组件(Giscus)
- ✅ 配置说明(在 config.php 中)
阶段 7: SEO 优化(优先级:中)
7.1 元标签优化
任务清单:
- [x] 添加 description 标签 ✅
- [x] 添加 keywords 标签 ✅
- [x] 添加 author 标签 ✅
- [x] 实现动态元标签生成 ✅
预期产出:
- ✅ 更新的模板(BlogRenderer)
- ✅ 元标签生成逻辑(支持 Front Matter)
7.2 结构化数据
任务清单:
- [x] 添加 Article 结构化数据 ✅
- [x] 添加 Breadcrumb 结构化数据 ✅
- [ ] 验证结构化数据(Google 结构化数据测试工具)
预期产出:
- ✅ 结构化数据标记(JSON-LD 格式)
- [ ] 验证报告(需手动测试)
7.3 Open Graph 标签
任务清单:
- [x] 添加 og:title ✅
- [x] 添加 og:description ✅
- [x] 添加 og:image ✅
- [x] 添加 og:url ✅
- [x] 添加 twitter:card ✅
预期产出:
- ✅ Open Graph 标签
- ✅ Twitter 卡片标签
7.4 性能优化(Lighthouse)
任务清单:
- [ ] 运行 Lighthouse 审计
- [ ] 修复性能问题
- [ ] 改善可访问性
- [ ] 改善最佳实践
预期产出:
- Lighthouse 报告
- 性能优化
阶段 8: 部署和运维(优先级:中)
8.1 部署脚本
任务清单:
- [x] 创建部署脚本
deploy.sh✅ - [x] 实现自动构建 ✅
- [x] 实现自动部署 ✅
- [ ] 添加部署回滚(可选)
预期产出:
- ✅
deploy.sh(已完成) - [ ] 部署文档(待完成)
8.2 监控和日志
任务清单:
- [x] 实现访问日志 ✅
- [x] 实现错误日志 ✅
- [x] 添加日志轮转 ✅
- [ ] 集成监控工具(如 New Relic, Datadog)(可选)
预期产出:
- ✅
LogService类(已完成) - ✅ 日志系统集成(已集成到 config.php 和 index.php)
- ✅ 环境变量配置(已添加到 env.example)
- [ ] 监控配置(可选)
8.3 备份策略
任务清单:
- [x] 创建备份脚本 ✅
- [ ] 实现自动备份(需配置 cron)
- [x] 实现备份恢复 ✅
- [ ] 测试备份恢复流程(需手动测试)
预期产出:
- ✅
backup.sh(已完成) - ✅
restore.sh(已完成) - [ ] 恢复文档(待完成)
8.4 配置管理
任务清单:
- [x] 创建
.env.example✅ - [x] 使用 vlucas/phpdotenv 加载配置 ✅
- [x] 分离开发和生产配置 ✅
- [ ] 敏感信息加密(可选)
预期产出:
- ✅
env.example(已完成) - ✅
.env(不提交,已在 .gitignore 中) - ✅ 环境变量加载逻辑(已集成到 config.php)
阶段 9: 用户体验改进(优先级:低)
9.1 移动端菜单
任务清单:
- [ ] 创建汉堡菜单
- [ ] 实现滑动菜单
- [ ] 添加触摸手势
预期产出:
- 移动端菜单组件
9.2 字体大小调整
任务清单:
- [ ] 添加字体大小切换按钮
- [ ] 实现3种尺寸(小/中/大)
- [ ] 保存用户偏好到 localStorage
预期产出:
- 字体大小组件
- 偏好保存逻辑
时间估算
| 阶段 | 预计时间 | 优先级 |
|---|---|---|
| 1. 安全性修复 | 3-5 天 | 高 |
| 2. 代码重构 | 5-7 天 | 高 |
| 3. 测试基础设施 | 5-7 天 | 高 |
| 4. 文档完善 | 3-5 天 | 高 |
| 5. 性能优化 | 3-5 天 | 中 |
| 6. 功能增强 | 10-15 天 | 中 |
| 7. SEO 优化 | 3-5 天 | 中 |
| 8. 部署和运维 | 5-7 天 | 中 |
| 9. 用户体验改进 | 5-7 天 | 低 |
| 10. 高级特性 | 10-15 天 | 低 |
总计: 约 50-80 天
执行建议
第一阶段冲刺(1-2 周)
- 完成阶段 1: 安全性修复
- 完成阶段 4: 文档完善(部分)
第二阶段冲刺(2-3 周)
- 完成阶段 2: 代码重构
- 完成阶段 3: 测试基础设施
第三阶段冲刺(2-3 周)
- 完成阶段 5: 性能优化
- 完成阶段 7: SEO 优化
第四阶段冲刺(3-4 周)
- 完成阶段 6: 功能增强
- 完成阶段 8: 部署和运维
持续改进
- 阶段 9: 用户体验改进(按需)
- 阶段 10: 高级特性(按需)
风险和缓解
风险 1: 大规模重构可能引入新 bug
缓解: 完善的测试覆盖 + 分步重构
风险 2: 时间估算不准确
缓解: 定期回顾和调整计划
风险 3: 兼容性问题
缓解: 多浏览器测试 + 渐进式增强
风险 4: 性能优化可能过度
缓解: 基准测试 + 实际测量
成功标准
- ✅ 所有已知安全漏洞修复
- ✅ 代码覆盖率达到 80%+
- ✅ 完整的文档和测试
- ✅ Lighthouse 性能分数 > 90
- ✅ 页面加载时间 < 2 秒
- ✅ 所有主要功能正常工作
- ✅ 通过安全审计
- ✅ 通过无障碍审计
下一步行动
- 审阅此计划
- 确定优先级和时间表
- 开始第一阶段:安全性修复
计划创建日期: 2026-01-10 计划创建人: plan-execution-master 最后更新: 2026-01-10 (README.md 更新完成,测试完善,代码注释完成,CacheService 实现并测试)
项目状态评估(2026-01-10)
已完成 ✅
- 安全类实现: SecurityFilter, PathValidator, CSRFProtection, InputValidator 已创建并测试
- 代码重构: 已引入命名空间,模块化结构 (
_blog/src/) - 路径验证: PathValidator 已集成到 config.php
- Parsedown 安全模式: 已在 BlogRenderer 中配置
- 测试基础设施: phpunit.xml 和 composer.json 已配置
- 单元测试: 已完成 52 个测试用例,122 个断言全部通过 ✅
- SecurityFilterTest.php - PathValidatorTest.php - InputValidatorTest.php - CSRFProtectionTest.php
- 文档清理: 已归档 16 个历史文档到 archive/ 目录 ✅
- CHANGELOG: 已创建版本历史记录 ✅
- README 更新: 已创建完整的 README.md(413 行,包含项目介绍、功能列表、安装说明、使用指南、部署指南、贡献指南等)✅
- 单元测试完善: BlogRenderer 测试(315 行,25+ 测试用例)和 BlogContentProcessor 测试(298 行,20+ 测试用例)已完善 ✅
- 集成测试完善: RenderFlowTest(5 个测试用例)和 FileScanTest(260 行,13 个测试用例)已创建 ✅
待完成 🔄
- 缓存测试: 待缓存机制实现后添加 CacheTest.php
- 代码注释: 部分类已有注释,需完善
- 性能优化: 缓存机制、资源优化
- 功能增强: 搜索、RSS、站点地图等
优先级调整建议
- 立即执行: 安全功能集成验证 + 测试用例编写
- 短期: ✅ 文档清理 + README 更新(已完成)
- 中期: 性能优化 + SEO 优化
- 长期: 功能增强 + 用户体验改进