1 2 3 4 v

iTxGo🍃 - xBlog

xBlog 是一款基于 PHP + SQLite / PostgreSQL 构建的轻量、高性能多用户博客系统。
不依赖任何框架,代码透明,路由直接映射文件路径。快速部署、易于管理、专注写作

一、核心特性

👥 多用户体系

支持完整的用户注册、登录、个人空间功能。每个用户拥有独立头像(支持上传/恢复默认),个人主页(user.php)展示该用户发布的全部文章、评论等。后台用户管理支持角色分配(管理员/普通用户)、封禁/解封、用户名检索等操作。

多作者可同时在站点上发布内容,适合团队博客、技术社区或开放式写作平台。站内消息面板(admin/message_panel.php)支持用户相互发送私信。

🗄️ 双数据库支持

同时兼容 PostgreSQL 和 SQLite,并提供双向迁移脚本。个人站点可直接使用 SQLite,无需安装配置数据库服务;需要更高并发或生产级可靠性时可一键切换到 PostgreSQL。

  • migrate_pg_to_sqlite.php — PostgreSQL → SQLite
  • migrate_sqlite_to_pg.php — SQLite → PostgreSQL

⚡ 静态页面缓存

文章详情页自动生成 HTML 静态缓存文件(cache/article/*.html),降低数据库查询压力。缓存跟随文章增删改自动失效,无需人工介入维护。

🎛️ 完整后台管理

模块 功能
📊 仪表盘 博客统计 · 快捷操作 · 主机状态 · 附件概览
✉️ 消息面板 发送消息 · 管理消息 · 搜索消息
📝 文章管理 管理文章 · 撰写文章 · 搜索文章
👥 用户管理 管理用户 · 分配用户组
💬 评论管理 管理评论 · 搜索评论
🏷️ 分类标签 管理分类标签
⚙️ 系统配置 基础设置 · 用户组管理 · 权限管理 · X币设置
📁 附件管理 管理附件

🔌 插件扩展机制

预留 plugin/ 插件目录,功能模块独立开发,不影响核心代码。目前内置三个插件:密码块访问统计天气信息

🌓 深色/浅色主题

前台内置浅色(style-light.css)和深色(style-dark.css)两套主题,跟随系统偏好自动切换,用户也可手动切换,偏好记忆在本地。

📡 SEO 就绪

  • 自动生成 RSS 订阅源(rss.xml
  • 自动生成站点地图(sitemap.xml
  • 支持 robots.txt 协议

🛡️ 安全机制

  • PDO 预处理,防止 SQL 注入
  • 密码哈希存储(password_hash
  • 登录态 Session 管理
  • 敏感配置独立存放

二、目录结构

xBlog - PHP + PostgreSQL / PHP + SQLITE 博客架构目录:
***/
├── 404.html                                # 404 页面
├── ajax_comment.php                        # AJAX 评论处理
├── ajax_like.php                           # AJAX 点赞处理
├── ajax_login.php                          # AJAX 登录处理
├── ajax_register.php                       # AJAX 注册处理
├── ajax_user_status.php                    # AJAX 文章互动状态处理
├── ajax_view.php                           # AJAX 文章浏览量统计处理
├── article.php                             # 文章详情页
├── blog.db                                 # SQLite 数据库文件
├── captcha.php                             # 验证码生成
├── favicon.ico                             # 网站 ICO
├── generate_rss.php                        # RSS 订阅生成脚本
├── generate_sitemap.php                    # 网站地图生成脚本
├── index.php                               # 主页
├── inst.php                                # 部署脚本(SQLite / PostgreSQL)
├── login.php                               # 登录页
├── logout.php                              # 登出
├── migrate_pg_to_sqlite.php                # 迁移脚本(PostgreSQL → SQLite)
├── migrate_sqlite_to_pg.php                # 迁移脚本(SQLite → PostgreSQL)
├── README.txt                              # 读我
├── register.php                            # 注册页
├── robots.txt                              # 协议
├── rss.xml                                 # RSS 订阅
├── search.php                              # 搜索页
├── sitemap.xml                             # 网站地图
├── user.php                                # 个人空间
├── user_tab.php                            # 个人空间 Tab 内容 AJAX 接口
│
├── admin/                                  # 后台目录
│   ├── add_article.php                     # 添加文章
│   ├── ajax_decrypt_secret.php             # 解密密码块
│   ├── api_server_stats.php                # 服务器指标 API
│   ├── api_summary.php                     # AI 摘要 API
│   ├── articles.php                        # 文章管理
│   ├── attachments.php                     # 附件管理
│   ├── avatar_delete.php                   # 头像恢复 API
│   ├── avatar_upload.php                   # 头像上传 API
│   ├── categories_tags.php                 # 分类标签管理
│   ├── check_username.php                  # 站内消息用户名验证接口
│   ├── comments.php                        # 评论管理
│   ├── config.php                          # 配置管理
│   ├── dbms.php                            # 数据库工具
│   ├── download_db.php                     # 下载数据库
│   ├── edit_article.php                    # 编辑文章
│   ├── edit_comment.php                    # 编辑评论处理
│   ├── index.php                           # 后台主页
│   ├── message_panel.php                   # 消息面板
│   ├── search_articles.php                 # 文章搜索 API
│   ├── search_comments.php                 # 评论搜索 API
│   ├── search_users.php                    # 用户搜索 API
│   ├── upload.php                          # 上传文件
│   └── users.php                           # 用户管理
│
├── assets/                                 # 静态资源目录
│   ├── tippy/                              # 提示框
│   │   ├── popper.min.js                   # Popper.js 库压缩版
│   │   ├── scale.css                       # 缩放动画样式
│   │   └── tippy-bundle.umd.min.js         # 核心功能及常用插件
│   ├── admin_articles_search.js            # 后台文章搜索脚本 JavaScript
│   ├── admin_comments_search.js            # 后台评论搜索脚本 JavaScript
│   ├── admin_icons.svg                     # 后台 SVG Sprite
│   ├── admin_script.js                     # 后台主体脚本 JavaScript
│   ├── admin_style.css                     # 后台样式表
│   ├── admin_users_search.js               # 后台用户搜索脚本 JavaScript
│   ├── favicon.svg                         # icon
│   ├── icons.svg                           # 前台 SVG Sprite
│   ├── script.js                           # 前台主体脚本 JavaScript
│   ├── style-dark.css                      # 前台深色主题样式
│   ├── style-light.css                     # 前台浅色主题样式
│   ├── toastui-editor.min.css              # Toast UI Editor 相关样式
│   ├── toastui-editor-all.min.js           # Toast UI Editor 相关JS函数
│   ├── webgl-bg.js                         # 动态背景 主线程
│   └── webgl-bg-worker.js                  # 动态背景 独立线程
│
├── cache/                                  # 缓存目录
│   └── article/                            # 文章片段缓存目录
│       └── *.html                          # 文章片段缓存文件
│
├── config/                                 # 存放敏感/环境相关配置
│   ├── cacert.pem                          # curl 使用的 CA 根证书,本地 Windows 环境需要
│   └── secrets.php                         # PostgreSQL 连接信息/存放 API Key 等密钥
│
├── fonts/                                  # 字体目录
│   └── Nunito-VariableFont_wght.woff2      # 字体文件
│
├── includes/                               # 公共函数 配置 模板目录
│   ├── default/                            # 默认文件目录
│   │   ├── admin_footer.php                # 后台公共页脚
│   │   ├── admin_header.php                # 后台公共头部
│   │   ├── footer.php                      # 前台公共页脚
│   │   └── header.php                      # 前台公共头部
│   ├── db_connect.php                      # 数据库连接
│   └── functions.php                       # 通用函数
│
├── plugin/                                 # 插件目录
│   ├── secret_block/                       # 密码块
│   │   ├── ajax_secret.php                 # AJAX 密码验证接口
│   │   ├── secret.key                      # KEY
│   │   ├── secret_block.php                # 密码块核心文件
│   │   ├── secret_block_script.js          # 密码块 JavaScript
│   │   └── secret_block_style.css          # 密码块样式
│   ├── statistics/                         # 统计
│   │   ├── data/                           # 数据目录
│   │   │   ├── .htaccess                   # 分布式配置
│   │   │   └── stats.db                    # 统计数据库
│   │   ├── core.php                        # 核心配置
│   │   ├── stats_online.php                # 统计当前在线人数
│   │   ├── stats_page.php                  # 统计单篇文章/页面的浏览量
│   │   ├── stats_today.php                 # 统计今日访问量
│   │   ├── stats_total.php                 # 统计全站累计访问总量
│   │   └── tracker.php                     # 前端埋点接收器
│   └── weather/                            # 天气
│       ├── api.php                         # 异步加载接口
│       ├── weather_functions.php           # 天气插件函数
│       ├── weather_styles.css              # 天气插件样式
│       ├── weather_widget.php              # 固定地区版
│       ├── weather_widget_geolocation.php  # 浏览器地理定位版
│       ├── weather_widget_ip.php           # IP 定位版
│       ├── weather_widget_ip_with_days.php # IP 定位未来天气版
│       ├── weather_*.json                  # 固定地区版 缓存文件
│       └── weather_ip_*.json               # IP 定位版 缓存文件
│
├── uploads/                                # 上传目录
│   ├── images/                             # 文章附件目录
│   └── avatars/                            # 头像附件目录
│       ├── default/                        # 默认头像附件目录
│       │   ├── male.svg                    # 默认男头像
│       │   └── female.svg                  # 默认女头像
│       └── user_*.jpg                      # 用户上传头像文件
│
├── vendor/                                 # league/commonmark 2.8.0 依赖目录
├── composer.json                           # 临时:项目依赖声明文件:列出需要哪些第三方库
├── composer.lock                           # 临时:依赖版本文件:记录当前安装的所有库的版本
└── composer.phar                           # 临时:Composer 工具本身:用于安装/更新依赖的可执行文件

三、安装部署

环境要求

组件 版本要求
PHP 7.4+
PDO 扩展 pgsql 或 sqlite
PostgreSQL 12+(可选)
SQLite 3(可选)

部署步骤

  • inst.php 有详细的指引步骤
# 1. 上传代码至 Web 目录
# 2. 设置目录权限(SQLite 模式)
chmod 755 cache/ uploads/ blog.db
# 3. 浏览器访问安装脚本
https://你的域名/inst.php
# 4. 选择数据库类型,填写连接信息和管理员账号
# 5. 部署完成后自动删除 inst.php

目录权限说明

路径 权限要求
cache/ 可读写(生成静态缓存)
uploads/ 可读写(上传图片/头像)
blog.db 可读写(SQLite 数据库文件)
plugin/statistics/data/ 可读写(统计数据)

四、数据库迁移

提供双向迁移脚本,支持在 PostgreSQL 和 SQLite 之间无缝切换:

# PostgreSQL → SQLite
php 这里替换为你目前目录路径 migrate_pg_to_sqlite.php

# SQLite → PostgreSQL
php 这里替换为你目前目录路径 migrate_sqlite_to_pg.php

⚠️ 执行迁移前请务必备份数据。脚本会以交互方式提示确认每一步操作。

五、插件详情

🔐 密码块(secret_block)

在文章内容中插入需要密码才能查看的隐藏片段。

  • AJAX 无刷新验证
  • 独立密钥管理
  • 自定义提示文案
  • 数据文件:plugin/secret_block/secret.key

📊 访问统计(statistics)

独立的轻量级统计模块,数据存储于单独的 SQLite 数据库中,不影响主库性能:

  • 全站累计访问量
  • 今日访问量
  • 当前在线人数
  • 单篇文章浏览量
  • 数据文件:plugin/statistics/data/stats.db

🌤️ 天气信息(weather)

支持三种定位模式,自动缓存减少 API 调用:

模式 说明
固定地区版 手动指定城市
IP 定位版 根据访客 IP 自动识别
浏览器定位版 使用 Geolocation API

出处: https://xblog.itxgo.com/article.php?id=26
版权:本文采用 CC BY-NC-SA 4.0 协议,完整转载请注明来源。