QBCMS(启步内容管理系统)

轻量级 PHP 内容管理系统,当前版本 v1.4.2

本文档面向 QBCMS 通用源码版本;面向特定站点部署的私有主题模板及官方后台专有模块不包含在本文档说明范围内。

QBCMS(启步内容管理系统)是一款自研的轻量级 PHP 内容管理系统,基于原生 PHP 开发、无第三方框架依赖,采用 PDO 抽象层同时支持 MySQL 与 SQLite。系统开箱即用,适合企业官网、政务站点等内容型网站建设。

作者:金恒(QQ:372324643) 官网:www.qbcms.com QQ交流群:527445836

功能特性

前台功能

  • 栏目与文章:多级栏目、栏目别名、文章发布与编辑、浏览量统计、文章点赞与收藏
  • 专题与标签:专题列表/详情页、标签云、标签文章列表
  • 单页:别名 URL 单页(如 /page/about/)
  • 留言与评论:留言板(分类、审核)、文章评论(审核)
  • 会员系统:注册/登录/找回密码、个人中心(资料、我的评论、我的留言、收藏、点赞)
  • 会员投稿:创建/编辑/删除投稿,后台审核
  • 相册(随发行包提供的相册插件):相册封面墙、相册详情、单图浏览、私密相册(仅会员可见)
  • 站内搜索:支持文章/作者/评论搜索,范围由后台配置控制
  • 友情链接:前台申请、后台审核
  • Sitemap:动态生成 sitemap.xml
  • 动态数据 API:文章正文、浏览量、评论数、点赞/收藏数等接口,供静态 HTML 页面 AJAX 注入实时数据

后台功能

  • 控制台:站点概况与快捷入口
  • 内容中心:栏目管理、发表/管理文章、专题管理、单页管理、标签管理、投稿审核、回收站
  • 会员互动:会员管理、会员角色、评论管理、留言管理(含类别与设置)
  • 站点展示:轮播图管理、友情链接、链接分组
  • 系统工具:网站设置、操作日志管理(可按模块配置记录范围)、Hook 调试、数据库备份、静态 HTML 生成、上传管理、应用中心(插件)、系统更新
  • 管理权限:管理员账号、管理角色,内置 RBAC 细粒度权限体系
  • 模板标签:标签手册、标签生成器、自定义标签、模板在线编辑

基础能力

  • RBAC 权限 + 操作日志 + CSRF 防护 + 登录验证码 + 后台 IP 黑白名单
  • 目录/文件安全防护(配置文件、数据库文件、上传目录脚本访问拦截)
  • 插件系统(Hook 事件中心、ZIP 包一键安装)
  • 在线升级(自动备份 → MD5 校验 → 增量覆盖)
  • 静态 HTML 生成与模板/数据缓存
  • URL 伪静态(Apache / IIS / Nginx 均支持,未配置重写时也能工作)

运行环境

项目

要求

PHP

7.0 及以上(推荐 7.4+,支持7.0~8.5环境)

必需扩展

PDO(MySQL 或 SQLite 驱动至少其一)

可选扩展

ZipArchive(在线升级)、GD(验证码与图片水印;无 GD 时验证码自动降级为纯文本模式)

Web 服务器

Apache / IIS / Nginx

目录权限

install/、cache/、uploads/、data/ 需具备写入权限

依赖

零第三方依赖,无需 Composer

快速安装

  1. 将程序文件上传至站点根目录;
  1. 确认 install/、cache/、uploads/、data/ 目录存在且可写(缺失时安装程序会自动创建);
  1. 浏览器访问 /install/ 进入安装向导,按 4 步完成: 安装须知 → 环境检测 → 配置安装 → 完成;
  1. 数据库选择:默认推荐 SQLite(免配置,自动生成 data/qbcms+随机或自定义后缀.db);如需高性能或已有 MySQL 环境,可切换为 MySQL 并填写连接信息;
  1. 表前缀:默认 qbcms_,多站点共用同一数据库时可修改前缀区分;
  1. 后台目录:默认 admin,建议安装时修改为自定义名称(如 manage、houtai)以降低被扫描风险;
  1. 安装成功后自动生成 config.php 与 data/、uploads/ 目录防护文件;安装完成系统会自动清理 install 目录,如清理失败请手动删除,防止他人重入安装向导;
  1. 配置伪静态(可选但推荐):
    • Apache:使用根目录 .htaccess(已内置);
    • IIS:使用根目录 web.config(已内置);
    • Nginx:按 .htaccess 规则等价转换——除真实文件外全部转发给 index.php,并优先命中 static/ 目录下生成的静态 HTML;
    • 未配置重写规则时,系统可通过 index.php?c=Xxx&a=index 及 Router 的 REQUEST_URI 解析正常访问。

后台默认地址为 /admin/,登录后进入控制台。

目录结构

配置说明

config.php 由安装程序生成,常用常量如下:

常量

含义

说明

DB_TYPE

数据库类型

sqlite 或 mysql

DB_HOST / DB_PORT / DB_NAME / DB_USER / DB_PASS / DB_CHARSET

MySQL 连接配置

仅 MySQL 模式使用

DB_SQLITE_PATH

SQLite 数据库文件路径

默认 data/qbcms.db,自定义后缀时为 data/qbcms_后缀.db

DB_PREFIX

数据表前缀

默认 qbcms_

ADMIN_DIR

后台目录名

可改为 manage、houtai 等

DEFAULT_TEMPLATE

默认前台主题

默认 default

DEBUG_MODE

调试模式

生产环境建议设为 false,避免错误信息外泄

SITE_URL

站点地址

留空时自动识别

URL_REWRITE

是否开启伪静态

开启后 url() 等生成伪静态链接,需服务器配置对应重写规则

QBCMS_VERSION

当前版本号

1.4.2

其余 APP_PATH、CACHE_PATH、UPLOAD_PATH、INSTALL_PATH、ROOT_PATH、STATIC_PATH、TEMPLATE_PATH、MEMBER_TEMPLATE_PATH 为路径常量,一般无需修改。

前台路由与 URL

系统支持伪静态 URL 与查询字符串两种形式。开启 URL_REWRITE 并配置重写规则后,主要 URL 如下:

URL

说明

控制器

/

首页

Home@index

/list-1.html、/list/1、/栏目别名/

栏目列表

List@index

/article-1.html、/article/1

文章详情

Article@index

/page/别名/

单页

Page@show

/topic/、/topic/别名/

专题列表 / 专题详情

Topic@index / Topic@show

/tag/、/tag/标签名/

标签云 / 标签文章列表

Tag@cloud / Tag@lists

/album.html、/album-1.html、/photo-1.html

相册封面 / 相册详情 / 单图浏览

Album@index / Photo@index(相册插件)

/guestbook.html

留言板

Guestbook@index

/search/关键词/

站内搜索

Search@index

/member/login、/member/register、/member/dashboard、

/member/profile、/member/comments、/member/guestbook

会员中心

Member

/contribution/list、/contribution/create

会员投稿

Contribution

?c=Sitemap

生成 sitemap.xml

Sitemap@index

?c=Api&a=...

动态数据 API

Api

/link/apply/

友情链接申请

Link@apply

模板引擎与标签

前台使用自研模板引擎(app/Core/View.php),支持 {qbcms:} 专属标签、{include:} 模板包含、{var:} / {raw:} 变量输出、{if} / {foreach} 条件与循环语法,以及 [field:xxx] 字段占位符。

插件可通过 app/plugins/{插件名}/templates/ 提供前台模板,渲染查找优先级为「主题目录 > 插件模板目录 > 默认主题」,因此插件模板无需改动主题即可生效,也可被主题同名模板覆盖;模板内可用 @插件名/模板名 显式引用插件自带模板。

常用标签示例:

标签

用途

常用参数

示例

{qbcms:arclist}

文章列表,最常用内容标签

cid(支持 1,2,3 多栏目)、tid、num、by、order、page

{qbcms:arclist cid="1" num="10"}

{qbcms:article}

单篇文章

id

{qbcms:article id="1"}

{qbcms:catlist}

栏目列表

pid、num

{qbcms:catlist pid="0" num="10"}

{qbcms:category}

单个栏目

id

{qbcms:category id="1"}

{qbcms:slider}

轮播图

name、id

{qbcms:slider name="首页Banner"}

{qbcms:linklist}

友情链接

gid、num

{qbcms:linklist gid="0"}

{qbcms:tagcloud}

标签云

num

{qbcms:tagcloud num="30"}

{qbcms:topiclist}

专题列表

num

{qbcms:topiclist num="10"}

{qbcms:topic}

单个专题

id

{qbcms:topic id="1"}

{qbcms:page}

单页内容

id、alias

{qbcms:page alias="about"}

{qbcms:guestbook}

留言列表

num

{qbcms:guestbook num="10"}

{qbcms:guestbook_form}

留言表单

class

{qbcms:guestbook_form}

{qbcms:custom}

自定义标签(后台配置)

name

{qbcms:custom name="hot_articles"}

{include:header.html}

包含模板(最多 3 层嵌套)

file

{include:header.html}

{qbcms:site_name} 等

站点变量

site_name、site_logo、site_keywords 等

{qbcms:site_name}

/ {raw:xxx}

输出控制器变量

page_title、pagination、breadcrumb 等

{if $var} / {foreach $list as $item}

条件分支 / 循环

—

{if $is_top}...{else}...{/if}

[field:xxx length=N]

字段占位符(可截字)

length

[field:title length=20]

分页栏

—

后台「模板标签 → 标签手册」内置全部标签参数与示例的可视化文档;「标签生成器」可交互式生成标签代码;「自定义标签」支持在后台配置数据源、条件与模板,并支持标签级缓存。

插件系统

  • 插件存放于 app/plugins/,每个插件一个子目录,包含 plugin.json(名称、标题、版本、依赖、权限声明、后台菜单、hooks)与 Plugin.php(继承 \qbcms\Core\Plugin);
  • PluginManager 负责扫描插件、安装(执行 SQL)、启用/停用(enabled.flag)、卸载(执行 uninstall SQL)以及 ZIP 包上传安装,支持依赖检测与版本兼容检查;
  • 提供 Hook 事件中心(Action / Filter,类似 WordPress),核心在关键点触发事件,插件注册回调实现扩展;插件也可通过 hooks 注册自定义模板标签;
  • 随发行包提供的「相册」插件示例:提供相册/相册照片数据表、相册与图片管理、私密相册(仅会员可见)、前台 {qbcms:album} 挂件、后台菜单与 plugin.album.* 权限点;相册前台模板与样式随插件提供(app/plugins/album/templates/、app/plugins/album/assets/),主题可覆盖插件自带模板。

后台管理

后台按业务分组的两级菜单(以通用版本为准):

  • 控制台:仪表盘
  • 内容中心:栏目管理、发表文章、文章管理、专题管理、单页管理、标签管理、投稿审核、回收站
  • 会员互动:会员管理、会员角色、评论管理、留言管理、留言设置、留言类别
  • 站点展示:轮播图管理、友情链接、链接分组
  • 系统工具:网站设置、日志管理、Hook 调试、数据库备份、静态 HTML、上传管理、应用中心、系统更新
  • 管理权限:管理员账号、管理角色
  • 模板标签:标签手册、标签生成器、自定义标签、模板编辑

权限体系为「管理员账号 — 管理角色 — 权限点」三级 RBAC,后台控制器通过 hasPermission('perm_key') 控制操作权限,菜单按权限自动隐藏。

安全机制

  • 目录防护:根目录 .htaccess / web.config 禁止访问 config.php、敏感扩展名(sql/db/sqlite/log/md/lock/bak/env/ini/yml/yaml 等)与目录列表;data/、uploads/ 目录另有防护文件(安装时自动生成/补齐),阻止数据库文件与上传目录脚本被直接 HTTP 访问;
  • 源码防护:app/ 目录源码禁止直接 HTTP 访问(插件 assets/、php/ 端点除外),避免框架与插件源码被直接读取;
  • 认证安全:管理员与会员密码均使用 password_hash 存储、password_verify 校验;后台登录默认开启验证码;支持后台 IP 黑白名单;后台目录名可自定义防扫描;
  • 请求安全:会话统一安全参数并生成 CSRF Token,写操作校验;前后台控制器/方法名均做白名单校验,防止类名注入;输入统一过滤、输出统一转义,模板 {raw:} 输出限制为控制器预渲染的安全 HTML;
  • 权限安全:RBAC 权限点控制前后台操作;支持文章会员阅读权限、私密相册等前台权限;
  • 运维安全:安装锁 install/.installed 阻止重复安装;安装完成自动清理 install 目录;config.php 含数据库密码等敏感信息,禁止提交到公开仓库或暴露给第三方。

在线升级、备份与静态化

  • 系统更新:后台「系统更新」可配置更新服务器地址,自动检测新版本(默认 24 小时降频缓存);升级前自动备份数据库与文件,下载升级包后校验 MD5 与 manifest,覆盖时排除 config.php、uploads/、data/、static/、cache/、install/ 等关键目录,并执行增量 SQL;
  • 数据库备份:后台一键备份、下载与恢复(DatabaseBackup);
  • 静态 HTML:文章/栏目等变更时触发静态页面生成,输出至 static/ 目录,Web 服务器优先命中静态文件以减少动态请求;配合前台动态数据 API 注入评论区、浏览量等实时数据。

二次开发

  • 命名空间与自动加载:

    命名空间

    目录

    qbcms\Core\

    app/Core/

    controller\

    controller/

    adminc\

    admin/controllers/

    model\

    model/

    plugin\

    app/plugins/

  • 前台控制器:新建 controller\XxxController 继承 \qbcms\Core\Controller,类方法即 action,通过 URL index.php?c=Xxx&a=index&id=1 或伪静态 /xxx-1.html 访问;
  • 后台控制器:新建 adminc\XxxController,可使用 hasPermission() 做权限控制,并在后台菜单中挂载;
  • 模型:继承 \qbcms\Core\Model 并声明 protected $table,即可获得常用 CRUD 能力;
  • 模板标签:可在模板引擎标签注册表扩展,或由插件通过 hooks 注册 template_tags;标签级缓存可通过后台自定义标签配置;
  • Hook:使用 \qbcms\Core\Hook 的 Action / Filter 机制在关键点插入自定义逻辑(如通知、日志、内容过滤);
  • 数据库:统一通过 Database::getInstance() 取得 PDO 单例,SQL 兼容 MySQL 与 SQLite,多库 SQL 注意使用 {PREFIX} 风格或按数据库类型分支。