MyBlog 改进计划

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: 性能优化可能过度

缓解: 基准测试 + 实际测量


成功标准

  1. ✅ 所有已知安全漏洞修复
  2. ✅ 代码覆盖率达到 80%+
  3. ✅ 完整的文档和测试
  4. ✅ Lighthouse 性能分数 > 90
  5. ✅ 页面加载时间 < 2 秒
  6. ✅ 所有主要功能正常工作
  7. ✅ 通过安全审计
  8. ✅ 通过无障碍审计

下一步行动

  1. 审阅此计划
  2. 确定优先级和时间表
  3. 开始第一阶段:安全性修复

计划创建日期: 2026-01-10 计划创建人: plan-execution-master 最后更新: 2026-01-10 (README.md 更新完成,测试完善,代码注释完成,CacheService 实现并测试)


项目状态评估(2026-01-10)

已完成 ✅

  1. 安全类实现: SecurityFilter, PathValidator, CSRFProtection, InputValidator 已创建并测试
  2. 代码重构: 已引入命名空间,模块化结构 (_blog/src/)
  3. 路径验证: PathValidator 已集成到 config.php
  4. Parsedown 安全模式: 已在 BlogRenderer 中配置
  5. 测试基础设施: phpunit.xml 和 composer.json 已配置
  6. 单元测试: 已完成 52 个测试用例,122 个断言全部通过 ✅

- SecurityFilterTest.php - PathValidatorTest.php - InputValidatorTest.php - CSRFProtectionTest.php

  1. 文档清理: 已归档 16 个历史文档到 archive/ 目录 ✅
  2. CHANGELOG: 已创建版本历史记录 ✅
  3. README 更新: 已创建完整的 README.md(413 行,包含项目介绍、功能列表、安装说明、使用指南、部署指南、贡献指南等)✅
  4. 单元测试完善: BlogRenderer 测试(315 行,25+ 测试用例)和 BlogContentProcessor 测试(298 行,20+ 测试用例)已完善 ✅
  5. 集成测试完善: RenderFlowTest(5 个测试用例)和 FileScanTest(260 行,13 个测试用例)已创建 ✅

待完成 🔄

  1. 缓存测试: 待缓存机制实现后添加 CacheTest.php
  2. 代码注释: 部分类已有注释,需完善
  3. 性能优化: 缓存机制、资源优化
  4. 功能增强: 搜索、RSS、站点地图等

优先级调整建议

  1. 立即执行: 安全功能集成验证 + 测试用例编写
  2. 短期: ✅ 文档清理 + README 更新(已完成)
  3. 中期: 性能优化 + SEO 优化
  4. 长期: 功能增强 + 用户体验改进
← 返回目录