文档

QiLog 用户手册

面向站点使用者:安装、登录、写文章、管评论、换主题、装插件、备份、升级、排错。

不需要懂 PHP。所有操作都在浏览器里完成。需要开发主题或插件,请看配套的《主题开发手册》和《插件开发手册》。


1. 认识 QiLog

QiLog 是一个零依赖的 PHP 博客系统:只要主机支持 PHP + MySQL,把整包解压上传就能跑,不需要 Composer、Node、也不占用常驻进程。

特点 说明
零依赖 不需要装任何第三方库,也没有构建步骤
虚拟主机友好 没有 public/ 子目录,运行目录就是站点根
数据与代码分离 你的文章、配置、上传、主题、插件全在 data/,升级不覆盖
数据表精简 默认 8 张表,装好即用

组成部分:

区域 作用
前台 访客看到的站点:首页、分类、标签、搜索、文章、单页
后台 /admin,你管理内容的地方
安装向导 /install.php,只在第一次安装时用

2. 安装

2.1 环境要求

项 要求
PHP 8.0 以上(推荐 8.2);需 pdo_mysql、mbstring、json、gd、zip
MySQL 5.7 以上
Web 服务器 Apache(自带 .htaccess)或 Nginx(要手写伪静态,见 §19.4)
目录权限 data/ 必须可写

2.2 安装向导

  1. 把安装包整包解压到站点根目录。运行目录就是站点根,没有 public/。
  2. 浏览器打开 http://你的域名/install.php。
  3. 按向导填写: - 数据库地址(虚拟主机常给内部主机名,解析不了就填 localhost 或 127.0.0.1); - 数据库名、账号、密码; - 表前缀(默认 qilog_,同一库放多个站点时必须改); - 管理员账号、密码、邮箱。
  4. 向导会写 data/config.php 与 data/installed.lock。

2.3 安装后必做的三件事

  1. 删掉根目录的 install.php(系统已写 installed.lock 防重装,但删掉更干净)。
  2. 确认 data/ 可写:属主应是 PHP-FPM 用户,权限 755。
  3. 到后台「设置 → 基本信息」填站点名称和站点地址——地址填错会导致前台链接、RSS、sitemap 全部指向错误域名。

3. 登录与账号

忘记密码:QiLog 没有自助找回。用数据库客户端打开 qilog_users 表,用下面的 PHP 片段生成一段新密码哈希再写回 password 字段:

php -r "echo password_hash('你的新密码', PASSWORD_DEFAULT), PHP_EOL;"

4. 后台界面导览

4.1 侧栏(5 组 16 项)

分组 菜单项 最低角色
控制台 仪表盘 / 个人设置 订阅者
撰写 撰写文章 投稿者
撰写 发布单页 编辑
管理 文章 投稿者
管理 单页 / 分类 / 标签 / 评论 编辑
管理 媒体库 作者
扩展 菜单 编辑
扩展 主题 / 插件 管理员
系统 用户 / 备份 / 检查更新 / 设置 管理员

4.2 顶栏与铃铛

右侧依次是:

4.3 手机 / 窄屏

窄屏下侧栏变成抽屉,点顶栏左侧的汉堡按钮展开,点遮罩收起。


5. 仪表盘

仪表盘是概览页:


6. 撰写与发布文章

6.1 编辑器

「撰写文章」打开的是 Markdown 编辑器,左右/上下分栏或纯编辑模式由编辑器自身决定:

编辑器可以被插件替换(例如 wangEditor 富文本插件)。替换后正文改存 content_html、Markdown 源字段 content_md 留空;两种编辑器混用于同一站点是安全的。

⚠️ 用富文本写的文章,在 Markdown 编辑器里看不到正文(那里只读 content_md)。若此时强行保存,系统会阻止并提示,以免清空正文——请改用富文本编辑器编辑,或先把正文转换为 Markdown 再保存。

6.2 Slug 与固定链接

Slug 是这篇文章在 URL 里的短名。留空会自动用标题生成。URL 结构由「设置 → 固定链接」决定,可选:

结构 示例
简洁型 /{slug} /hello-world
日期型 /{year}/{month}/{slug} /2026/09/hello-world
ID 型 /?p={id} /?p=42
自定义 自己组合占位符,如 /archives/{year}/{month}/{slug}.html

可用占位符:{slug}、{id}、{year}、{month}。

改固定链接结构不会自动重定向旧地址——已发布文章的外部链接会失效。决定结构前想清楚。

6.3 分类与标签

6.4 封面图

在编辑器右侧上传封面(thumbnail)。主题可在列表页或文章页展示它。上传后会进媒体库。

6.5 摘要

不填摘要时,前台会自动截取正文前若干字(长度由「设置 → 阅读 → 摘要长度」控制)。

6.6 置顶

勾选「置顶」后该文章在列表里优先展示(列表项字段 is_pinned)。主题需要自己消费这个字段——部分主题可能仅做排序、不额外加标记。

6.7 定时发布

填了未来时间的「定时发布」后,文章状态会保持在待发布队列,到点由系统的自动维护任务翻牌为「已发布」。

⚠️ 这套系统没有常驻定时进程。翻转依赖「有人访问站点」或「外部定时任务」(见 §19.1)。长期没有访客的站点,定时发布会延后——这是唯一需要配置外部计划任务的场景。

6.8 状态与回收站

状态 含义
已发布 前台可见
草稿 只有你自己看得见
待审核 投稿者提交、等编辑审核(编辑可在列表里「通过」/「驳回」)
私密 不公开
回收站 已删除,可恢复

删除文章是移到回收站,不是立刻物理删除。回收站里 30 天前的文章会被自动清理(由自动维护任务执行)。

6.9 批量操作

列表页支持勾选多篇后批量处理(删除等)。列表上方可按状态筛选,也可搜索。


7. 单页

「发布单页」与文章几乎一样,区别是:单页不进分类、不进标签、不参与列表分页,通常用于「关于」「联系方式」这类固定页面。

单页另有 page_path:可以给它指定一个自定义路径。

模板下拉里会出现主题提供的「单页变体模板」(文件名 page-*.php),例如内置主题自带的「友情链接」模板。选了就用那套版式渲染。

友情链接功能已在 1.4.1 从核心移除,后续以插件形式提供。「友情链接」模板现在渲染为空列表,等插件接入数据。


8. 分类与标签

「管理 → 分类」:新建、改名、设父级(层级)、设 slug、删除。

「管理 → 标签」:新建、改名、设 slug、删除。

分类/标签是有层级的组织方式,删除前确认没有文章在用——被引用的分类删除后,那些文章会失去归属。


9. 评论管理

「管理 → 评论」列表按状态分组:

状态 含义
全部 不过滤
待审核 等处理
已通过 前台可见
垃圾 已标记为垃圾
已删除 在回收站

单条操作:通过 / 待审核 / 垃圾 / 删除(可恢复)。列表支持多选批量删除。

后台可配置(「设置 → 评论」):

防垃圾建议:保持「蜜罐」开启,并合理设置「单条评论最大链接数」。这两项能挡掉绝大多数机器评论。


10. 媒体库

「管理 → 媒体库」统一管理上传的图片与文件。

删除前会检查引用:如果某个文件正被文章封面、正文或插件表引用,系统会提示,避免出现前台裂图。插件可以通过钩子登记自己的引用源。

上传限制在「设置 → 上传」里配:

配置 说明
上传大小上限 单文件大小(还要同时满足 PHP 的 upload_max_filesize / post_max_size)
扩展名白名单 允许上传的类型
缩略图宽 / 高 自动生成缩略图的尺寸

11. 菜单

「扩展 → 菜单」管理导航。

位置 前台表现
顶部导航(header) 前台页头导航,当前唯一会自动渲染的位置
页脚(footer) 后台可配可存,核心不渲染——页脚区域实际由「主题 → 小部件」的页脚组件决定
暂不分配 保存但不显示

如果前台页头没显示你配的菜单,检查该菜单是否绑定到了 header。


12. 主题

「扩展 → 主题」:

上传 zip 的规则(系统强制校验):

  1. zip 里只能有一个顶层目录,目录名即主题名;
  2. 目录名只允许字母、数字、_、-;
  3. 装的时候会先删旧版再放新版(覆盖安装);
  4. 不能覆盖正在启用的主题,要先切到别的主题。

站点升级不会动 data/themes/,你的主题是安全的。


13. 插件

「扩展 → 插件」:

启用插件时系统会顺带跑一次该插件的「数据表自检」,把插件需要的表建好。已启用的插件不能被覆盖安装,要先停用。

内置自带一个 qilog-dashboard-widgets(仪表盘组件),可在仪表盘里添加各种区块。


14. 用户与权限

「系统 → 用户」管理账号。五个角色:

角色 大致能做什么
订阅者 只能看仪表盘、改自己的个人设置
投稿者 写文章(提交后进待审)
作者 写文章、用媒体库
编辑 管理文章/单页/分类/标签/评论/菜单
管理员 全部,含主题、插件、用户、备份、设置、升级

规则与保护:


15. 备份与恢复

「系统 → 备份」:

操作 说明
创建备份 导出一份数据库 SQL 备份
下载 把备份文件下载到本地(强烈建议定期下载留档)
恢复 用某个备份覆盖当前数据库
删除 删除备份文件
上传并恢复 上传本地 SQL 文件直接恢复

注意:


16. 检查更新与一键升级

「系统 → 检查更新」:

  1. 列表顶部显示更新检查结果,三种状态可区分: - 已是最新; - 有更新(显示版本号与更新说明); - 检查失败:原因(不会显示成「已是最新」——失败时也不会写缓存,可重试)。
  2. 有更新时可以做: - 查看更新说明:了解这个版本改了什么; - 差异预览:列出将要被覆盖的文件,先看再决定; - 一键升级:下载、校验、覆盖、自检、必要时自动回滚。
  3. 如果站点版本低于该版本的最低可升级版本,会给出对应提示: - 目标版本更高 → 「请先升级到 X,再升级到 Y」; - 目标版本本身即下限 → 「请下载完整安装包手动覆盖升级」。
  4. 覆盖过程中若出问题,页面提供自救入口:清理临时文件、重新进入升级、回滚到覆盖前。

自动更新策略(「设置 → 全局设置」):

选项 行为
关闭(默认) 只诊断、不自动回滚;升级由你手动确认
开启自动回滚保护 覆盖完成后自动做回环自检,检出前台 500 / 核心版本未生效则自动回滚到覆盖前

自动策略不会跳过人工确认,只是增强「覆盖失败时自愈」的能力。 自检若连不上本站(虚拟主机常见)一律按「不确定」处理,绝不回滚。 (历史版本曾有「小版本 / 全部」两档,二者实现上完全等价,已合并为单一开关。)


17. 设置

「系统 → 设置」共 7 个标签。

17.1 基本信息

站点名称、副标题(slogan)、站点描述、关键词、站点地址。

站点地址必须填对(含 https://),否则前台链接、RSS、sitemap、邮件里的链接都会错。

17.2 全局设置

时区、登录验证码开关、站点关闭模式、会话闲置超时、自动更新策略。

站点关闭模式开启后,非管理员访客看到维护页;/admin/*、/assets、/feed、/sitemap.xml、/robots.txt、/favicon.ico 不受影响。

17.3 评论

全局关闭、游客评论、昵称/邮箱必填、蜜罐、倒序显示、每页条数、单条最大链接数、评论策略(comment_policy 文本,用于声明审核规则并向访客展示)。

17.4 上传

上传大小上限、扩展名白名单、缩略图宽 / 高。

17.5 固定链接

四种结构(简洁 / 日期 / ID / 自定义),见 §6.2。

17.6 阅读

首页每页文章数、RSS 条数、摘要长度。

17.7 邮件通知

{site_name} {post_title} {author} {content} {post_url} {time} {excerpt} {parent_content}

邮件默认异步投递(响应返回后再发)。在支持 fastcgi_finish_request 的主机上基本无感;不支持时由自动维护任务以每 5 分钟一封的节奏走完。待发数长期不降时,点一下「立即发送队列邮件」。


18. 个人设置

修改昵称、邮箱、头像、密码。不能改自己的角色(这是防自提权的设计)。


19. 站点维护

19.1 计划任务与自动维护

QiLog 没有常驻定时进程,维护任务(定时发布、回收站清理、访问统计、邮件投递)采用「请求驱动自愈」:

每个访客请求都会顺带检查一次节流(默认 60 秒一轮;上一轮被中断则退避到 300 秒),到点就跑一轮轻量维护。

这意味着:

场景 结果
站点有正常访客 维护任务自动跑,不需要配任何东西
站点长期无人访问 维护任务延后
长期无人访问 且 用了定时发布 需要配外部计划任务

需要加速时,把下面这个地址加到主机面板的计划任务里(类型选「访问 URL」,周期 5 分钟):

https://你的域名/cron/{随机key}

不支持伪静态的主机,把 /cron/ 换成 ?cron= 也一样有效:

https://你的域名/?cron={随机key}

地址(含随机 key)在「设置 → 邮件通知 → 投递队列」面板里可以看到并复制。key 等同于密码,请勿公开。

注意:后台「站点设置」里已经没有单独的「计划任务」标签——投递队列与定时地址都归在「邮件通知」面板末尾。

19.2 邮件队列

见 §17.7。待发数就是队列长度;点「立即发送队列邮件」立刻排空。

19.3 上线检查清单

19.4 Nginx 伪静态(Nginx 用户必看)

Nginx 不读 .htaccess,要手写伪静态。最关键的一条:

location ^~ /assets/ {
    try_files $uri $uri/ /index.php?$query_string;
}
location / {
    try_files $uri $uri/ /index.php?$query_string;
}

为什么必须加 ^~ /assets/:插件的静态资源是由 PHP 分发的虚拟路径(项目根目录并没有 assets/plugin/ 这个物理目录)。而宝塔默认站点配置里有匹配静态扩展名的正则 location(如 location ~ .*\.(js|css)?$),正则 location 优先级高于普通前缀 location,会直接按磁盘路径取文件 → 404 → 请求根本到不了 index.php。

症状:启用 wangEditor 之类的插件后编辑器空白,浏览器控制台报 style.css / index.js 404。

安全加固(可选,屏蔽 data/ 下的敏感文件):

location ~ ^/data/(config\.php|installed\.lock|backups/|cache/|logs/|sessions/) { return 404; }
location ~ /\.(git|svn|env) { return 404; }

20. 常见问题与排错

症状 原因 / 处理
数据库连接失败:getaddrinfo failed 虚拟主机给的数据库主机名内部解析不了。把 data/config.php 的 db.host 改成 localhost 或 127.0.0.1
插件资源 404、富文本编辑器空白 Nginx 缺 ^~ /assets/,见 §19.4
413 Request Entity Too Large 上传文件过大。同时调大 Nginx client_max_body_size 20m 与 PHP 的 upload_max_filesize / post_max_size
data/ 不可写 / 上传失败 属主不是 PHP-FPM 用户,改 chown / chmod 755
前台 404 页不生效,出现 Nginx 默认页 宝塔建站生成的根目录 404.html + error_page 404 /404.html 抢了。删掉根目录 404.html
定时发布的文章没按时出现 站点长期无访客。配一个外部计划任务指向 /cron/{key},见 §19.1
邮件一直待发、收不到通知 SMTP 配置有误,或主机不支持响应后投递。先点「立即发送队列邮件」看报错,再核对 §17.7
改了主题样式没变化 确认改的是当前启用主题目录;后台有缓存时强刷(Ctrl/Cmd + Shift + R)
想看到真实报错信息 临时在 data/config.php 里把 debug 设为 true,看完立刻改回
上传主题/插件报「应包含单一顶层目录」 打包时把目录本身一起打进去了吗?要的是 zip -r x.zip mytheme,不是 zip -r x.zip mytheme/*
忘记管理员密码 见 §3,用 password_hash() 生成新哈希写回数据库
后台某菜单不见了 当前账号角色权限不足。对照 §4.1 的等级表

21. 角色能力对照表

能力 订阅者 投稿者 作者 编辑 管理员
仪表盘 / 个人设置 ✓ ✓ ✓ ✓ ✓
撰写文章 / 文章列表 ✓ ✓ ✓ ✓
媒体库 ✓ ✓ ✓
发布单页 / 单页管理 ✓ ✓
分类 / 标签 / 评论 ✓ ✓
菜单 ✓ ✓
审核投稿 ✓ ✓
主题 / 插件 ✓
用户 / 备份 / 更新 / 设置 ✓

对应 QiLog v1.5.0。文档与代码不一致时以代码为准。

© 2026 QiLog · 基于开源协议发布 · 返回官网首页