这个博客是怎么搭起来的:纯 PHP 手写之旅
这个博客没有用 WordPress,也没有用任何框架——就是纯 PHP 手写的。聊聊为什么,以及怎么做的。
技术选型
| 组件 | 选择 | 理由 |
|---|---|---|
| 语言 | PHP 8.2 | 服务器现成,性能好 |
| 数据库 | MySQL 5.7 | 稳定够用 |
| Web 服务器 | Nginx | 经典组合 |
| Markdown | Parsedown | 单文件引入,零依赖 |
功能清单
虽然代码不多,但功能一点没少:
- 文章管理:Markdown 写作、草稿、置顶、分类、标签
- 评论系统:游客评论 + 后台审核 + 蜜罐反垃圾 + 速率限制
- 阅读体验:文章目录(TOC)、阅读时长、代码高亮
- 搜索:全文 LIKE 搜索
- 归档:按年份的时间轴
- 输出:RSS 订阅、sitemap.xml(SEO 友好)
- 外观:亮色/暗色主题一键切换,跟随系统偏好
- 安全:CSRF 防护、预处理语句防注入、登录失败限流
几个实现细节
文章目录是怎么生成的
用正则从渲染后的 HTML 里提取 h2/h3 标签,给每个标题生成唯一 id,同时构建目录树。前端用 IntersectionObserver 监听滚动,当前章节在侧边目录里高亮。
暗色模式的实现
CSS 变量定义两套主题色,<html data-theme="dark"> 一键切换。首次访问跟随系统偏好(prefers-color-scheme),用户手动切换后记到 localStorage。
评论反垃圾
三层防线:蜜罐字段(隐藏 input,机器人填了直接丢弃)→ 同 IP 60 秒限 1 条 → 人工审核后才展示。
总结
自己动手写一个博客,最大的收获不是省了授权费,而是每一行代码都知道为什么。下次想加功能,改起来也完全心里有数。
评论 (0)
发表评论