木子博客系统

2026-09-20_034243

2026-09-20_034323
一、系统简介

木子博客系统是基于 ThinkPHP 6 + PHP 8 + MySQL 8 开发的个人博客系统,覆盖博文展示、后台管理(富文本)、访客留言、前台用户体系、图片轮播、附件下载六大模块。

三大特色能力:

  1. 邀请码注册 —— 博客是自己的空间,谁注册你说了算:后台一键批量生成邀请码、设置有效期、导出未使用清单,注册开关随开随关。

  2. 附件下载 —— 文章底部挂附件,带防盗链签名(1 小时有效),可开启「仅登录用户可下载」,每次下载自动留痕。

  3. 图片浏览 —— 正文图片自动提取为轮播,支持触屏滑动、鼠标拖拽、键盘翻页、灯箱全屏预览、懒加载、自动播放。

二、功能亮点

(一)邀请码注册系统

批量生成:后台一次生成 1~50 个,可统一设置过期时间与备注(发给谁、用途)。

状态管理:未使用、已使用、已禁用三种状态;已使用的码作为注册审计记录,不可改不可删。

一键导出:未使用的邀请码可导出为 Excel(文件名为「未使用的邀请码_时间戳.xlsx」),方便线下分发。

注册联动:开启「邀请码注册」后,前台注册必须携带有效码(未使用且未过期);使用后自动回填使用者与时间。

灵活开关:系统设置中随时开关邀请码校验;可配置注册页「获取邀请码」的跳转链接。

防滥用:登录失败 5 次锁定 15 分钟;留言按 IP 限频。

(二)附件下载系统

拖拽上传:后台拖拽上传,MIME + 扩展名双重白名单(拒绝 php、exe、svg),单个附件不超过 50MB,随机重命名。

签名防盗链:下载 URL 采用「过期时间 + HMAC-SHA256」签名,默认 1 小时过期,无法伪造外链。

下载门槛:可开启「仅登录用户可下载」,把附件变成注册用户的专属资源。

下载留痕:每次下载记录下载者(用户、游客、IP)、时间、来源文章、下载的附件。

展示友好:附件支持自定义展示名与说明文字,展示在文章详情页下载区。

(三)图片浏览体验

自动轮播:文章正文图片自动提取为顶部轮播,无需手动编排。

手势交互:支持触屏滑动、鼠标拖拽、键盘左右方向键、指示点、自动播放。

灯箱预览:点击图片全屏灯箱查看,支持前后翻页。

性能优化:懒加载 + 按断点响应式(1024 以上多列、768~1023 双列、768 以下单列,375px 无横向滚动)。

三、功能清单

前台(访客 / 用户端)

首页:卡片、列表双布局可选(后台设置切换),分页每页 10 篇,置顶优先,分类筛选,关键词搜索。

文章详情:富文本正文渲染;图片自动轮播 + 灯箱;附件签名下载区;留言区(审核模式可配)。

分类页、单页栏目、搜索页(含标签云)、关于页(单页栏目正文后台可编辑)。

前台用户体系:独立用户表;支持邀请码注册、用户名或邮箱登录、个人中心(改资料、改密码、我的留言);登录失败 5 次锁定 15 分钟。

留言:登录用户留言自动关联账号(防伪造),游客可匿名留言;审核模式可配。

广告位:首页、文章页、分类页、搜索页共 7 个预留位置,后台录入 HTML/JS 代码,启用即展示。

后台(管理员)

登录:bcrypt 校验、失败 5 次锁定 15 分钟、Session + CSRF;支持多管理员(super / editor 角色)、禁用启用、重置密码。

数据概览:文章、分类、前台用户、留言、下载统计 + 最新文章展示。

文章管理:自研 contenteditable 富文本编辑器(标题、加粗、斜体、列表、引用、代码块、链接、图片上传);发布 / 草稿、置顶、软删除回收站(30 天可恢复或彻底删除)、本地自动保存草稿。

分类管理:增删改、行内编辑排序;双类型(文章分类 / 单页栏目);单页栏目可编辑正文并上导航,删除前检测关联文章。

留言审核:待审、已通过、已删除三个标签页;区分游客与注册用户。

附件管理:拖拽上传、删除(同步删除磁盘文件)、下载计数。

邀请码管理:批量生成、禁用启用、删除、导出未使用 Excel。

广告位管理:7 个位置增删改、启用停用、实时预览。

前台用户:列表搜索、禁用启用、重置密码、清空留言、删除(历史留言保留转游客)。

系统设置:站点标题副标题、首页与分类页布局、留言审核开关、邀请码注册开关、邀请码获取链接、附件下载登录开关;保存即清缓存。

下载统计:附件下载日志可按用户、附件、文章维度查询。

四、环境要求

PHP:8.0 及以上(推荐 8.5,需 pdo_mysql 扩展)
MySQL:5.7+ 或 8.0
Composer:2.x(用于安装依赖)

五、一键安装(全新部署)

  1. 将代码部署到站点根目录,确保项目根目录与 runtime 目录可写。

  2. 浏览器访问任意页面 —— 未安装时自动跳转到安装器 /install.php。

  3. 填写数据库信息与管理员账号,选择是否导入演示数据,点击「开始安装」。

安装器自动完成的步骤:建库(不存在时自动创建)→ 导入 database/new_blog.sql → 创建或重置管理员(bcrypt 加密)→ 生成 .env(APP_KEY 随机生成)→ 安装器自动改名为 public/lock.php(已安装状态下访问它只会提示「访问错误」,无法重复进入安装)。

重装方法:把 public/lock.php 改名回 install.php → 删除 .env → 访问任意页面即可重新进入安装器。

六、快速启动(开发环境)

第一步:composer install(安装依赖)

第二步:php think run -H 127.0.0.1 -p 8000

启动后浏览器访问 http://127.0.0.1:8000

后台地址:http://127.0.0.1:8000/admin/login

七、目录结构

app/ 应用层
controller/ 前台控制器 + Admin/ 子命名空间后台控制器
model/ 数据模型(Article、Category、Comment、User、Attachment、Advert、InviteCode、DownloadLog、AdminUser、Setting)
middleware/ 中间件:AdminAuth(鉴权)、Csrf、CommentRateLimit(限频)
service/ 服务:XssService(清洗)、UploadService(上传)
validate/ 校验器
config/ 全局配置
route/app.php 路由集中定义
public/ 入口 + 静态资源 + 上传目录(install.php 安装器、lock.php 安装锁)
view/ 模板:public(前台)、admin(后台)
database/new_blog.sql 建表 + 演示数据脚本(安装器数据源)
docs/ 需求文档、数据库字典
.env 环境配置(安装器生成,不入版本库)

八、安全设计

SQL 注入:全 ORM 参数化查询。

XSS:富文本按标签、属性白名单过滤(extend/XssFilter),留言内容转义。

CSRF:会话 Token,POST 全局校验(表单 + X-CSRF-Token 请求头)。

弱口令:bcrypt 哈希;登录失败 5 次锁定 15 分钟。

身份伪造:留言昵称、邮箱服务端以注册资料为准,忽略表单伪造值。

上传攻击:MIME + 扩展名双重白名单,随机重命名,不超过 50MB,禁止 php、exe、svg。

越权:AdminAuth 中间件拦截全部后台路由。

下载防盗链:签名 URL(过期时间 + HMAC-SHA256,1 小时有效)+ 可选登录门槛。

注册滥用:邀请码准入(可开关);留言 IP 限频(60 秒 1 条)。

安装器:装完自动改名 lock.php,已安装状态访问仅提示「访问错误」。

九、Nginx 部署(生产)

server {
listen 80;
server_name blog.example.com;
root /path/to/blog_new/public;

index index.php;

location / {
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php?s=$1 last;
}
}
location ~ .php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ .(js|css|svg|png|jpg|jpeg|gif|webp)$ {
expires 7d;
access_log off;
}
}

生产部署注意事项:APP_DEBUG 设为 false;上传目录 public/uploads/ 需可写;定期备份数据库;.env 不入版本库。

十、常见问题

composer install 报错:确认 PHP 8+ 与 Composer 2.x 已安装;网络受限时使用国内镜像:composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/

数据库连接失败:检查 .env 的 DATABASE 配置与 MySQL 服务是否启动。

图片上传被拒:仅允许 jpg、jpeg、png、gif、webp、bmp;附件白名单见 config/upload.php。

忘记后台密码:直接用 SQL 重置(bcrypt 哈希后 UPDATE bl_admin_users 表)。

想重新安装:把 public/lock.php 改名回 install.php,删除 .env,访问任意页面。

下载项目
https://gitee.com/codermuz/blog_new/releases/tag/v2.01
链接: https://pan.baidu.com/s/1c9dOUy4wJA2LeDpm3hl01w?pwd=h6b8 提取码: h6b8

联系邮箱
codermuz@163.com

posted @ 2026-09-20 04:51  codermuz  阅读(4)  评论(0)    收藏  举报