×

一个基于 ThinkPHP 8.0 的现代化个人博客系统

独孤求败 独孤求败 发表于2026-08-05 13:54:45 浏览57 评论0

抢沙发发表评论

个人博客系统

基于 ThinkPHP 8.0 和 PHP 8.4 的现代化个人博客系统,采用 MVC 架构,支持静态页面生成、富文本编辑、完整的权限管理和安全防护。

项目地址:https://gitee.com/nick_qin/nick-blog

功能特性

后台管理

  • 文章管理:文章的创建、编辑、发布、删除、草稿管理、回收站恢复
  • 分类管理:文章分类的增删改查,支持文章数量统计
  • 标签管理:标签的增删改查,支持标签云展示
  • 链接管理:友情链接的增删改查,支持显示/隐藏状态
  • 用户管理:后台用户的增删改查,支持超级管理员和普通作者角色
  • 系统设置:网站基本信息、SEO配置、邮件配置等全局设置
  • 页面管理:关于页面、版权声明页面的内容管理
  • 静态页面重建:一键重建首页、文章列表、详情页等静态HTML

前台展示

  • 响应式设计:完美适配 PC 和移动端设备
  • 文章列表:支持按分类、标签筛选,分页展示
  • 文章详情:支持代码高亮、图片展示、点赞功能
  • 搜索功能:支持按关键词搜索文章
  • 热门推荐:热门文章排行、相关文章推荐
  • 标签云:动态标签云,按文章数量显示热度
  • 友情链接:底部友情链接展示

安全防护

  • CSRF 防护:表单提交 CSRF 令牌验证,AJAX 请求自动携带令牌
  • XSS 过滤:后端白名单过滤(DOMDocument),前端输出转义处理
  • 账号锁定:登录失败5次后锁定30分钟
  • 权限控制:超级管理员与普通作者权限区分
  • 密码安全:bcrypt 加密存储,防止重复加密
  • 会话安全:登录成功后重新生成 Session ID,防止会话固定攻击
  • 安全响应头:X-Frame-Options、X-XSS-Protection、X-Content-Type-Options、Referrer-Policy、Permissions-Policy
  • Cookie 安全:HttpOnly、Secure(生产环境)、SameSite=Strict(生产环境)

性能优化

  • 静态化引擎:自动生成静态 HTML,提升 SEO 和访问速度
  • 图片处理:自动压缩、水印添加
  • 缓存机制:文件缓存与 Redis 缓存支持

开发特性

  • RESTful API:完整的 API 接口,支持文章统计、点赞、搜索等
  • 日志系统:按日期和大小自动分割日志,分类存储
  • 邮件服务:SMTP 邮件发送,支持异常告警

技术栈

分类
技术
版本
语言
PHP
8.4+
框架
ThinkPHP
8.0
数据库
MySQL
5.7.25+
前端框架
LayUI
2.8.18
富文本编辑器
wangEditor
5.1.23
图标库
Font Awesome
6.x
测试框架
PHPUnit
10.x

环境要求

  • PHP 8.4+
  • MySQL 5.7.25+ (50M+ 可用空间)
  • Apache 2.4+ (支持 .htaccess 和 mod_rewrite)
  • PHP 扩展:PDO、GD、MBstring、fileinfo

目录结构

nick-blog/
├── app/                      # 应用目录
│   ├── admin/                # 后台应用
│   │   ├── controller/       # 后台控制器(Article、Category、Tag、User等)
│   │   ├── middleware/       # 后台中间件(Auth、Csrf)
│   │   └── view/             # 后台视图模板
│   ├── api/                  # API 接口
│   │   └── controller/       # API控制器(Article、Category、Search等)
│   ├── index/                # 前台应用
│   │   ├── controller/       # 前台控制器(Index、Article、Search等)
│   │   └── view/             # 前台视图模板
│   ├── Base/                 # 核心类库
│   │   ├── Enums/            # 枚举类(ArticleStatus、UserRole等)
│   │   ├── Services/         # 服务类(HtmlService、MailService等)
│   │   └── Functions/        # 公共函数(CustomLog、helpers等)
│   ├── model/                # 数据模型(Article、User、Category等)
│   ├── exception/            # 异常处理器(Handler)
│   ├── Request.php           # 自定义请求类
│   ├── helper.php            # 应用助手函数入口
│   ├── middleware.php        # 应用中间件配置
│   └── provider.php          # 应用服务提供器配置
├── config/                   # 配置文件(app、database、cache、session等)
├── route/                    # 路由配置(route.php、app.php)
├── public/                   # Web 根目录
│   ├── index.php             # 应用入口文件
│   ├── router.php            # 路由入口文件
│   ├── install.locked.php    # 安装程序(已锁定)
│   ├── .htaccess             # Apache 重写规则
│   └── static/               # 静态资源
│       ├── admin/            # 后台静态资源(css、js)
│       ├── index/            # 前台静态资源(css、js、fontawesome)
│       ├── sysimg/           # 系统图片(logo、默认封面)
│       └── vendor/           # 第三方库(jQuery、LayUI、wangEditor)
├── runtime/                  # 运行时目录(缓存、日志)
├── logs/                     # 日志目录(按应用分类)
├── doc/                      # 项目文档(需求文档、日志管理文档)
├── database.sql              # 数据库建表 SQL
├── composer.json             # Composer 依赖配置
├── composer.lock             # Composer 依赖锁定
├── think                     # ThinkPHP 命令行工具
├── .env                      # 环境变量配置
├── .gitignore                # Git 忽略规则
└── README.md                 # 项目说明文档

安装步骤

1. 上传文件

将所有文件上传到服务器的网站根目录。

2. 安装依赖

composer install

3. 设置目录权限

以下目录需要可写权限 (755 或 775):

chmod -R 755 runtime/
chmod -R 755 public/
chmod -R 755 logs/

4. 配置环境变量

复制 .env.example 为 .env(如果存在),或直接修改 .env 文件。

开发环境配置

APP_ENV = development
APP_DEBUG = true
APP_TRACE = false

[DATABASE]
TYPE = mysql
HOSTNAME = 127.0.0.1
DATABASE = nick_blog
USERNAME = root
PASSWORD = 
HOSTPORT = 3306
CHARSET = utf8mb4
PREFIX = bk_

[LANG]
default_lang = zh-cn

[ADMIN]
ADMIN_ROUTE_PREFIX = sysman

生产环境配置

APP_ENV = production
APP_DEBUG = false
APP_TRACE = false

[DATABASE]
TYPE = mysql
HOSTNAME = 127.0.0.1
DATABASE = your_database
USERNAME = your_username
PASSWORD = your_secure_password
HOSTPORT = 3306
CHARSET = utf8mb4
PREFIX = bk_

[LANG]
default_lang = zh-cn

[ADMIN]
ADMIN_ROUTE_PREFIX = sysman

环境变量说明

变量
开发环境
生产环境
说明
APP_ENV
development
production
环境标识,决定安全配置
APP_DEBUG
true
false
调试模式,生产环境必须关闭
APP_TRACE
false
false
追踪模式,生产环境必须关闭

生产环境自动生效的安全配置

当 APP_ENV = production 时,系统自动启用以下安全配置:

  • 调试模式:关闭(APP_DEBUG = false
  • 错误显示:隐藏详细错误信息(show_error_msg = false
  • Session Cookie:仅 HTTPS 传输(secure = true
  • 普通 Cookie:仅 HTTPS 传输(secure = true
  • Cookie SameSite:Strict 模式(更强的 CSRF 防护)

5. 导入数据库

执行 database.sql 文件导入数据库表结构:

mysql -u your_username -p your_database < database.sql

6. 配置 Web 服务器

确保 Apache 或 Nginx 正确配置,指向 public/ 目录。

Apache 配置

确保启用 mod_rewrite,并配置 .htaccess 文件。

Nginx 配置

server {
    listen 80;
    server_name yourdomain.com;
    root /path/to/public;
    index index.php;

    location / {
        if (!-e $request_filename) {
            rewrite ^(.*)$ /index.php/$1 last;
        }
    }

    location ~ \.php$ {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

7. 访问后台

访问后台地址:http://yourdomain.com/sysman/login

默认账号(安装时设置):

  • 用户名:admin
  • 密码:admin123

注意:后台路由前缀由 .env 文件中的 ADMIN.ADMIN_ROUTE_PREFIX 配置,默认为 sysman

目录访问权限说明

目录/文件
用途
访问权限
runtime/
运行时文件、缓存
禁止外部访问
config/
配置文件
禁止外部访问
logs/
日志文件
禁止外部访问
database.sql
数据库 SQL
禁止下载
.env
环境变量
禁止访问
public/upload/
上传文件
可访问
public/static/
静态资源
可访问
public/index.php
入口文件
可访问

命令行工具

# 清除缓存
php think clear

# 生成静态页面
php think html:build

# 查看路由列表
php think route:list

# 运行单元测试
php vendor/bin/phpunit

API 接口

文章相关

  • GET /api/article/recommend/:id - 获取推荐文章
  • POST /api/article/like - 文章点赞
  • GET /api/article/statistics - 获取文章统计数据

搜索

  • GET /api/search - 文章搜索

分类与标签

  • GET /api/category/all - 获取所有分类
  • GET /api/tag/all - 获取所有标签

安全建议

  1. 安装后处理:删除或重命名 public/install.locked.php
  2. 密码管理:定期修改后台密码,使用强密码
  3. 权限设置:最小化数据库用户权限
  4. 日志监控:定期检查日志文件,发现异常及时处理
  5. 备份数据:定期备份数据库和重要文件

常见问题

1. 安装页面打不开

检查 public/ 目录是否有 .htaccess 文件,确保 Apache 开启了 mod_rewrite

2. 静态页面不更新

手动重建:在后台"系统设置"页面保存设置,或访问 /admin/html/rebuild 接口。

3. 图片上传失败

检查 public/static/ 目录是否有写权限,确认 PHP upload_max_filesize 设置。

4. 邮件发送失败

检查"系统设置"中的 SMTP 配置是否正确,确保服务器支持邮件发送。

5. 页面显示异常

清除缓存:运行 php think clear 命令清除运行时缓存。

开发说明

代码规范

  • 严格类型声明:使用 declare(strict_types=1)
  • 注释规范:类、方法、关键代码均需添加详细注释
  • 异常处理:统一使用异常处理器处理应用异常

扩展开发

  • 新控制器继承对应基类(BaseAdmin 或 BaseController
  • 使用服务类处理复杂业务逻辑
  • 配置文件修改后需清除缓存

更新记录

2026-07-09 - 安全漏洞修复与上线配置

安全修复

  • 修复后台表格 templet 函数 XSS 漏洞(文章列表、用户列表、分类列表、标签列表、链接列表)
  • 增强后端 XSS 过滤函数,使用 DOMDocument 白名单过滤危险标签和属性
  • 修复用户模型密码重复加密问题
  • 添加登录成功后重新生成 Session ID(防止会话固定攻击)
  • 增强 CSRF 防护,全局 AJAX 请求自动携带 CSRF 令牌
  • 添加安全 HTTP 响应头中间件(X-Frame-Options、X-XSS-Protection、X-Content-Type-Options、Referrer-Policy、Permissions-Policy)
  • 清理页面注释中的敏感信息

配置优化

  • 数据库配置支持环境变量(.env 文件分组格式)
  • Session 和 Cookie 安全配置根据环境自动切换
  • 生产环境自动开启 Secure Cookie 和 SameSite=Strict
  • 更新 .env.example 模板文件

404 页面功能

  • 添加 3 秒倒计时自动返回首页功能
  • 同时支持手动点击"返回首页"按钮

2026-07-01 - 项目初始化

  • 项目创建,基于 ThinkPHP 8.0 + PHP 8.4
  • 实现文章管理、分类管理、标签管理、链接管理、用户管理等核心功能
  • 实现静态页面生成、富文本编辑、搜索功能
  • 实现基本的 CSRF 防护和账号锁定机制

感谢大家阅读,个人观点仅供参考,欢迎在评论区发表不同观点。


群贤毕至

访客