跳到主要内容
奇点CMS v0.4.66 · 官方网站 登录 / 注册 在线激活

更新日志

版本发布逐版本列出变更说明,站点公告按置顶与时间倒序排列,共 93 条记录;升级前请先阅读对应版本的变更说明与升级步骤。

版本发布 93 条 站点公告 0 条
  • v0.4.64

    官网新增用户系统 + 主站总览页「登录官方网站 / 获取授权验证」

    随交付包发布

    需求:"给官网增加一个用户系统用于管理授权网站管理,在主站后台总揽页增加一个登录官方网站的接口用于获取授权验证"。

    查看完整变更

    需求:"给官网增加一个用户系统用于管理授权网站管理,在主站后台总揽页增加一个登录官方网站的接口用于获取授权验证"。

    一、官网:授权用户中心(客户自助管理授权网站)

    页面能力
    official/user/login.php登录 / 注册同页(支持邮箱或 11 位手机号;注册限流 10 次/小时;登录限流 12 次/5 分钟);从客户站点跳转时显示「你从客户站点后台跳转而来(域名 xxx)」提示
    official/user/index.php我的授权:授权列表(套餐 / 绑定域名 / 到期 / 激活次数 / 换绑次数 / 状态徽标)、凭授权码认领、自助解绑换域名、自助续验、下载安装包入口、修改密码、登录记录
    official/user/logout.php退出登录
    • 会话隔离:用户中心用 OFFUSERSESSID,与官网后台(OFSESSID)完全分开;
    • 数据模型:新增 off_users 表,并给 off_licenses 自动迁移 user_id 列(首次访问自动完成,无需重跑安装向导);
    • 归属规则:一个账号可管理多个授权;授权码未被他人认领时可自助认领;已被他人认领时明确提示联系客服;越权操作(解绑/续验他人授权)一律拒绝。

    二、官网后台:用户管理(official/admin/users.php)

    • 列表 / 搜索(账号·称呼·公司)/ 分页;统计卡片:注册用户数、已归属授权数、未归属授权(待认领);
    • 用户详情:名下授权逐条列出,可解除归属;可把指定授权码指派给该用户;可重置密码;
    • 停用/启用、删除(删除时其授权只解除归属、不删除授权本身)。

    三、主站后台总览页:官方网站 · 商业授权卡片

    在总览页顶部新增卡片,四块信息 + 三个按钮:

    信息块内容
    官网连接正常 / 不可达 + 当前官网地址
    授权状态已授权商用 / 授权未通过 / 未绑定在线授权(含套餐与到期日)
    版本本站版本 vs 官网最新版(已最新 / 可更新)
    用户中心「查看我的授权 →」直达官网用户中心
    按钮作用
    登录官方网站跳转 官网/user/login.php?from=cms&domain=<本站域名>,带上来源与域名,登录后即可管理本域名授权
    获取授权验证提交到「商业授权」页执行 do=check:调官网 ping + releases 校验授权与最新版本
    授权设置进入商业授权页(填官网地址/授权码、激活、续验、解绑)

    新增 LicenseManager::officialLoginUrl() 与 officialHomeUrl() 供跳转使用。

    四、验证

    数据层与业务(21 项断言全通过):
      off_users 自动建表 ✓   off_licenses.user_id 自动迁移 ✓
      注册成功 ✓  重复注册被拒 ✓  非法账号被拒 ✓  弱密码被拒 ✓  登录成功 ✓  错误密码被拒 ✓
      ★ 认领授权成功 ✓   授权已归属 ✓   重复认领提示已在自己账号下 ✓   ★ 我的授权列表可读 ✓
      越权解绑被拒 ✓   授权可被激活 ✓   ★ 用户自助解绑成功(剩余换绑 1)✓   未绑域名续验给明确提示 ✓
      旧密码错误拒绝改密 ✓   两次不一致拒绝 ✓   ★ 改密成功 ✓   新密码可登录 ✓
      ★ officialLoginUrl 可生成且带 from=cms ✓   officialHomeUrl 可用 ✓
      (测试用户与授权已删除,库内无残留 ✓)
    
    HTTP 真机验证:
      官网 /user/login.php HTTP 200 / 6956 B 无报错 ✓   ?from=cms&domain= 变体 200 / 7064 B ✓
      /user/index.php 未登录 302 跳登录 ✓(守卫生效)
      官网首页 30000 B,导航含「用户中心」✓,零报错 ✓
      官网后台「用户管理」HTTP 200 / 6326 B,含用户表 ✓
      ★ 主站总览页 34122 B:含「官方网站 · 商业授权」卡片、「登录官方网站」按钮、「获取授权验证」按钮、
        官网连接状态、链接指向 user/login.php,全部命中且零 PHP 报错 ✓
  • v0.4.63

    主站配置官网接口地址 qdcms.cn + 主站↔官网 API 打通

    随交付包发布

    需求:"给主站配置官网接口地址'qdcms.cn',主站与官网的API相关功能"。

    查看完整变更

    需求:"给主站配置官网接口地址'qdcms.cn',主站与官网的API相关功能"。

    一、官网接口地址已配置

    主站设置项 license_api 已写入 http://qdcms.cn。实测该域名已经在运行官网系统(v1.0.2):

    接口结果
    ping✓ {"ok":true,"name":"奇点CMS","version":"v1.0.2","plans":4}
    plans✓ 4 个套餐(个人/商业/多站/体验)
    plugins✓ 12 个插件
    releases✗ unknown_action —— 该动作是 v1.0.5 才新增的,线上官网需升级

    也就是说:域名与授权链路已经通了,只差把官网升级到新版(同时获得安装向导修复、首页主站介绍、CMS 下载中心与 releases 版本检查接口)。

    二、主站↔官网 API 功能矩阵(4 条链路)

    #主站位置调用的官网接口作用
    1后台 →「商业授权」activate / verify / deactivate / ping在线激活、续验、解绑换域名
    2后台 →「插件与模块」plugins展示官方插件市场(名称/分类/版本/价格/说明)
    3后台 →「商业授权 → 官网连接与版本」(本次新增)ping + releases连接状态、官网版本、最新版对比、一键下载新版本
    4前台悬浮助手 / 工作面板无(本地模型或云端模型)不依赖官网

    三、本次新增内容

    #文件说明
    1official/api.php新增 action=releases:返回最新版本(版本号/体积/SHA256/发布时间/下载数)、下载地址、下载页地址、完整版本列表,并可按传入的 current 做版本对比(up_to_date);动作白名单与限流同步补充
    2includes/LicenseManager.php新增 officialInfo():一次拿到官网 ping 信息 + 最新版本对比(独立缓存 15 分钟,避免每次开页面都请求官网)
    3admin/license-online.php新增「官网连接与版本」面板:官网地址与接口 URL、连接状态(正常/不可达)、官网名称与版本、本站版本 vs 官网最新版(含"可更新"提示)、检查连接与更新按钮、官网下载页/下载最新版按钮、上次检查时间

    四、验证 → 16 / 16 通过

    A. 本地官网地址下:
       officialInfo 连接成功 ✓  官网名称+版本 ✓
       ★ releases 返回最新版与下载地址 ✓(v0.4.61 / /official/download.php?f=QDCMS-v0.4.61.zip)
       ★ 版本对比正确(本地官网 v0.4.61 vs 本站 v0.4.62 → up_to_date=true)✓
       ★ 插件市场接口可用(12 个插件)✓   releases 结构完整(历史版本 1 个)✓   ping 正常 ✓
    B. 写入 http://qdcms.cn:
       设置写入成功 ✓   连接结果 ok=true("授权服务正常")✓
       不可达时返回结构化失败、不抛异常 ✓   ★ 字段完整(api/up_to_date 均在)✓   授权摘要可读 ✓
    C. 后台渲染:商业授权页 HTTP 200 / 16858 B 无报错 ✓(含「官网连接与版本」面板、显示 qdcms.cn)
       插件与模块页 HTTP 200 / 27868 B 无报错 ✓
    D. 远端实测:qdcms.cn 的 ping/plans/plugins 均正常返回 ✓(releases 需升级官网到 v1.0.5)
  • v0.4.62

    官网新增 CMS 下载中心

    随交付包发布

    需求:"给官方网站增加一个CMS 下载功能"。

    查看完整变更

    需求:"给官方网站增加一个CMS 下载功能"。

    一、前台:CMS 下载中心(official/download.php)

    • 最新版卡片:版本号、体积、发布时间、下载次数、SHA256 校验值、通道(稳定/测试); 「立即下载」按钮 + 「查看安装文档」;右侧给出安装三步(环境确认 → 上传解压 → 运行安装向导);
    • 历史版本表:全部版本可回滚下载,显示版本/类型/体积/发布时间/下载次数/SHA256 前 16 位, 文件缺失的版本会明确标注「文件缺失」而不是给个坏链接;
    • 三栏说明:环境要求(PHP 8.0+/MySQL 8.0/可选 FFmpeg·Ollama)、授权说明(可自由下载评估,商用需购买授权并绑定域名)、升级与支持;
    • 导航新增「下载」入口,首页 Hero 新增「下载安装包」按钮。

    二、下载安全

    • 下载走 download.php?f=<文件名>:只允许 off_releases 表中登记过的文件名(先 basename 再白名单正则), 实测 ../../config/generated.php、index.php、不存在的文件全部 404 拒绝;
    • 流式输出(256KB 分块)+ 正确 Content-Type: application/zip + Content-Disposition 文件名 + Content-Length + X-Package-Sha256 响应头(便于用户校验);
    • releases/ 目录自动放置 .htaccess(禁目录列表 + 禁 PHP 执行)与 index.html。

    三、后台:下载管理(official/admin/downloads.php)

    • 上传 zip(≤300MB):自动计算体积与 SHA256、可从文件名解析版本号;同文件名则更新该条;
    • 可选设为最新版(前台优先展示)、通道(稳定/测试)、标题与更新说明;
    • 列表操作:编辑信息、设为最新、上架/下架、删除(同时删文件);统计卡片显示已上架版本数、累计下载、当前最新版、存储目录;
    • 「扫描本机安装包」:自动发现交付包目录里的 QDCMS-v*.zip 并复制登记,一步上架。

    四、验证(实测)

    ① 建表:off_releases 自动创建(无需重跑安装向导)✓
    ② 登记:QDCMS-v0.4.61.zip(1.61 MB,sha256 1f9c38d5a40b75b3…)✓
    ③ 下载页:HTTP 200 / 10066 B,含最新版卡片与授权说明,零 PHP 报错 ✓
    ④ ★ 真实下载:HTTP 200 / 1,686,687 B / application/zip,
       下载文件 sha256 = 1f9c38d5a40b75b39bc00c7ca4344f52bc34e2abef146ba7757dd3d033fda63d
       与源包**完全一致** ✓
    ⑤ 目录穿越防护:../../config/generated.php → 404 ✓  index.php → 404 ✓  nonexist.zip → 404 ✓
    ⑥ 后台「下载管理」:HTTP 200 / 8019 B,含上传表单 + 版本列表 + 扫描按钮,零报错 ✓
    ⑦ 首页「下载安装包」按钮 ✓  导航「下载」入口 ✓  页面标题「CMS 下载 - 奇点CMS 官方网站」✓

    五、打包说明

    交付包内不含安装包本体(避免"包中套包"):official/releases/ 只保留说明文件; 部署后到官网后台「下载管理」上传,或点「扫描本机安装包」自动登记交付包目录中的 QDCMS-v*.zip。

  • v0.4.61

    官网首页改用主站真实内容做介绍

    随交付包发布

    需求:"官方网站的首页介绍内用主站QDCMS相关内容做介绍"。

    查看完整变更

    需求:"官方网站的首页介绍内用主站QDCMS相关内容做介绍"。

    一、首页新增「主站介绍区块」(Hero 之后)

    不再只讲功能名词,而是用主站自己的模块与运行数据说话:

    • 12 个模块卡片:每个卡片显示模块名、真实计数、真实前台入口文件名(如 video.php、moments.php、qa.php)、 真实后台位置(如「内容 → 短视频」「工作面板 → Agent」)与一句话说明;
    • 计数为 0 的模块(如小说、短剧:装了但还没内容)显示 「已就绪」,不露"0 部小说"这种尴尬数据;
    • 运行实况条:数据库表数、已装载模块数、媒体文件数、注册用户数,以及计数最高的 6 个模块;
    • 标注「统计时间 xxx,每 10 分钟自动刷新」。

    实测(线上首页,与数据库逐项核对一致):

    12 个模块卡片:
      小说阅读 已就绪   novels.php         后台:内容 → 小说管理
      章节内容 已就绪                      后台:内容 → 小说管理
      短视频   10 条   video.php          后台:内容 → 短视频
      短剧     已就绪   drama.php          后台:内容 → 短剧
      动态广场 17 条   moments.php        后台:内容 → 动态
      百科词条 3 条    encyclopedia.php   后台:内容 → 百科
      问答     8 条    qa.php             后台:内容 → 问答
      时政资讯 5 条    news.php           后台:内容 → 资讯
      即时通讯 13 条   messages.php       后台:系统 → 聊天设置
      AI 知识库 18 条  agent-ai-api.php   后台:工作面板 → Agent
      Token 计费 38 条                    后台:运营 → Token
      用户体系 3 条    login.php          后台:用户 → 用户管理
    运行实况:数据库表 55 张 · 已装载模块 12 个 · 媒体文件 21 个 · 注册用户 3 位
              · 短视频 10 · 动态广场 17 · 百科词条 3
    首页体积 21872 B → 29786 B,零 PHP 报错 ✓

    二、配套改造

    #文件说明
    1official/includes/main-bridge.php(新增)主站桥接:读取主站数据库(独立部署用官网后台配置的 main_db_*;同机子目录部署自动复用上层主站 config/generated.php),输出模块清单与统计;结果缓存 10 分钟(不给主站库添压力);连接失败绝不报错
    2official/includes/main-intro.php(新增)首页介绍区块(模块卡片 + 运行实况 + 降级文案),由 index.php 一行 require 引入
    3official/admin/main-site.php(新增)官网后台「主站数据」页:启用开关、主机/端口/库名/账号/口令(口令留空=不修改)、保存后自动清缓存立即生效、清除配置;并列出"首页将展示什么"(模块 × 前台入口 × 后台位置 × 当前计数)
    4official/admin/includes/layout.php后台导航加入「主站数据」
    5official/index.phpHero 之后接入介绍区块(仅一行 require,不改动既有结构)

    三、降级与容错验证

    ① 关闭主站数据(main_db_enabled=0)→ 首页 29786 → 24042 B,显示"主站数据暂不可读 + 功能清单"文字介绍,
       零 PHP 报错 ✓(不白屏、不报错)
    ② 恢复为自动模式 → 首页 29787 B,模块卡片与实况数据回归 ✓
    ③ 主站数据库不可达时同样走降级分支(连接 3 秒超时 + 10 分钟缓存,不影响首页打开速度)✓
  • v0.4.60

    官网安装向导 + 修复 open_basedir 告警

    随交付包发布

    用户实测反馈:Linux 宝塔环境部署官网时报

    查看完整变更

    用户实测反馈:Linux 宝塔环境部署官网时报 Warning: is_file(): open_basedir restriction in effect. File(/www/wwwroot/config/generated.php) is not within the allowed path(s): (/www/wwwroot/qd/:/tmp/) 随后页面显示"官网数据库暂时不可用",并询问"官方网站是否有安装向导"。

    一、这是真 bug(已修)

    官网内核为了兼容"与 CMS 同机子目录部署",会去探测上层目录的 ../config/generated.php。 独立部署时上层目录通常在 open_basedir 之外 → is_file() 触发告警;且探测失败后代码 直接走到"数据库暂时不可用",既没说清原因、也没给安装入口。

    修法:

    1. 新增 offSafeIsFile():先判断目标路径是否落在 open_basedir 允许列表内, 不在允许范围就根本不去访问(不再产生任何告警);所有对上层目录/密钥文件的探测统一走它;
    2. 数据库连不上时区分两种情况: · 尚未安装 → 渲染引导页「官网尚未完成安装 → 打开安装向导」(不再是干巴巴一句报错); · 已安装 → 仍提示数据库不可用,并指向 data/official.log。

    二、新增图形安装向导(回答"是否有安装向导":原来只有命令行,现在有了)

    浏览器打开 install.php 即进入向导,三步完成,无需命令行:

    步骤内容
    ① 环境检测PHP 版本、必需/可选扩展(pdo_mysql/mbstring/json/openssl/curl/gd)、config 与 data 目录可写、session 可用、open_basedir 现状
    ② 数据库与管理员填主机/端口/库名/账号/口令 + 后台账号密码;库不存在自动创建;建 9 张表、14 项默认设置、12 个插件条目、首条公告;写入 config/generated.php(0600)
    ③ 完成显示官网/后台/接口入口与安全提醒;写入 data/.install.lock 自动锁定向导

    其它:保留命令行安装(--db-name/--db-user/--db-pass/--admin/--pass,幂等,适合脚本化/批量部署); 支持网址参数一键安装;已安装后再访问显示"已完成安装",删除锁文件可重装,带 ?token= 可进入。

    三、复刻用户环境实测(决定性验证)

    环境:全新目录(无 config/generated.php)+ 上层目录放一个主站配置(复刻 /www/wwwroot/config/…)
          open_basedir 严格限制为「站点目录 + C:/Windows/Temp/」——与用户的 /www/wwwroot/qd/:/tmp/ 同构
    ① 首页:HTTP 503,显示"官网尚未完成安装 → 打开安装向导"
       ★ open_basedir Warning:False ✓(修复前为 True)
       ★ 直接甩"数据库暂时不可用":False ✓
    ② 向导第①步环境检测:HTTP 200,4626 B(含 open_basedir 检测行)✓
    ③ 向导第②步提交:
       [ok] 数据库不存在,已自动创建 ✓  [ok] 已建/校验 9 张表 ✓
       [ok] 已创建管理员 ✓  [ok] 默认设置新增 14 项 ✓  [ok] 插件条目新增 12 个 ✓
       [ok] 已写入首条公告 ✓  [ok] 已写入独立配置 config/generated.php ✓  [ok] 已写入安装锁 ✓
    ④ 安装后:首页 HTTP 200 / 21449 B ✓   API ping → ok=true, version=v1.0.2 ✓
    ⑤ 再次访问向导 → 显示"已完成安装"并锁定 ✓
    ⑥ 清理:停服务器 / 删测试库 / 删模拟目录 ✓
  • v0.4.59

    官方网站支持独立打包与独立部署 + 一处空值加固

    随交付包发布

    需求:"官方网站独立打包"。

    查看完整变更

    需求:"官方网站独立打包"。

    一、官网现在可以脱离主站独立部署

    原来官网内核从主站 ../config/generated.php 读数据库口令,只能"同机子目录"部署; 本次改造后支持两种形态:

    形态访问地址数据库配置来源
    独立站点(新增)http://官网域名/official/config/generated.php(由 install.php 自动生成,或照抄 config/generated.example.php)
    主站子目录(原有)http://主站域名/official/无独立配置时自动复用主站配置,零配置即可启动
    • install.php 支持命令行/网址传入数据库参数,并会自动建库、写独立配置(权限 0600): ``bash php install.php --db-host=127.0.0.1 --db-name=qdcms_official \ --db-user=root --db-pass=口令 --admin=admin --pass=后台密码``
    • 新增 README.md(部署与接口速查)、docs/官网部署说明.md(独立/子目录/反代/HTTPS/权限/排查/升级全套)、config/generated.example.php 配置模板;
    • 新增独立打包脚本 qdcms-release/pack-official.py,产出 QDCMS-Official-v1.0.1.zip (36 个文件 / 128 KB,不含数据库口令、签名密钥、日志、限流计数)。

    二、独立部署实测(不是"应该能跑")

    ① 打包:36 个文件 / 128,277 字节;含 config/generated.php:False ✓;含 data 敏感文件:空 ✓
    ② 解压到临时目录 + 建全新库 qdcms_official_test(模拟客户拿到包的干净环境)
       install.php 退出码 0:9 张表 ✓ 管理员 ✓ 14 项设置 ✓ 12 个插件 ✓ 公告 ✓
       已生成独立配置 ✓ 已生成签名密钥 ✓
    ③ 用 PHP 内置服务器真机验证(14 个端点):
       /index.php 21449B ✓  /features.php 32864B ✓  /plugins.php 25401B ✓  /plugin.php?slug=ai-agent ✓
       /pricing.php ✓  /activate.php ✓  /changelog.php ✓  /news.php ✓  /docs.php ✓  /about.php ✓
       /admin/login.php ✓  /api.php?action=ping ✓  /api.php?action=plans ✓  /api.php?action=plugins ✓
       ping 返回:name=奇点CMS version=v1.0.1 plans=4 sign=64 位 ✓
       重复执行 install.php(幂等):退出码 0,管理员未重复创建 ✓
    ④ 清理:停临时服务器 ✓ 删除测试库(残留 False)✓ 删除临时目录 ✓

    三、顺带修掉的一处真实缺陷

    官网导航数组是 [标签, 链接] 元组形式,我此前插入的「公告中心」写成了关联数组 ['label'=>..,'url'=>..],导致该条 $item[1] 为 null → 在 strict_types 下 offUrl(null) 抛 TypeError → 官网首页整体 500(页面从 21872 B 掉到 3450 B)。 已修正为元组形式,并给内核 offUrl()/offAsset() 增加 ?string 空值容忍(防御同类问题)。 修复后官网 10 个前台页面 + API 全部复测 200 且零报错 ✓

  • v0.4.58

    官方网站 + 商业授权激活系统 + 插件市场

    随交付包发布

    需求:"根据网站开发一个官方网站,包含商业授权激活等功能,以及CMS 所需业务的和插件等功能"。

    查看完整变更

    需求:"根据网站开发一个官方网站,包含商业授权激活等功能,以及CMS 所需业务的和插件等功能"。

    一、交付形态

    官网位于 站点子目录 official/(http://你的域名/official/),复用现有 nginx/PHP, 无需新增站点、无需重载 nginx;数据存放在独立数据库 qdcms_official,与客户站点数据完全隔离。

    模块内容
    官网前台首页(产品亮点/库内统计/推荐插件/最新更新/套餐概览)、功能介绍(8 大模块 + 后台入口路径)、插件市场(搜索/分类/分页/详情/安装步骤/下载)、授权方案(4 套餐 + 对照表 + 购买流程 + FAQ)、在线激活与授权查询/解绑、更新日志(分页 + 版本徽标)、公告中心、文档中心(在线渲染 docs/*.md)、关于我们 + 在线留言
    官网后台仪表盘(授权/日志/到期预警)、授权码管理(批量生成/域名绑定/续期/吊销/恢复/重置换绑/导出 CSV)、激活日志(近 7 天统计、失败原因、导出)、订单管理(含一键发码、状态流转、统计)、插件管理(上下架/编辑/排序)、公告与更新、客户留言、站点设置 + 改密码(含管理员列表)
    授权服务 APIofficial/api.php:activate / verify / deactivate / query / plans / plugins / ping;响应 HMAC-SHA256 签名、请求 ts+nonce 防重放、按 IP 限流
    授权模型授权码 QDCMS-XXXX-XXXX-XXXX-XXXX,服务端保存域名绑定/有效期/激活次数/换绑次数/吊销状态;激活返回带签名令牌(7 天),客户端本地缓存状态,官网临时不可达不会立刻失效
    CMS 侧接入后台新增「商业授权」页:填官网地址 + 授权码 → 在线激活 / 立即续验 / 解绑换域名 / 清除配置;isLicensed() 增加"在线授权有效"这一条合法路径(保留原授权码与局域网放行逻辑);checkRemote() 由空实现变为真实探测
    插件体系off_plugins 表(slug/版本/分类/价格/依赖/安装步骤/下载量/评分/推荐位),官网提供市场展示与详情,CMS 侧保留原有模块化结构;已内置 12 个真实插件条目(AI 智能体增强、本地大模型、短剧、动态增强、IM 即时通讯、百科、问答、后台工作面板、官方支付、二维码、批量部署、静态瘦身)

    二、端到端验证(授权全链路 40/40 通过)

    A 段(官网侧 19 项全通过):
      ping/plans/plugins 接口 ✓  响应 64 位 HMAC 签名 ✓
      发码(格式校验)✓  ★首次激活成功 ✓  返回带签名令牌(含套餐/到期/域名)✓
      ★换域名激活被拒 domain_mismatch(并带出已绑定域名)✓
      ★重复 nonce 被拒(防重放)✓   过期时间戳被拒 ✓
      公开查询返回脱敏信息(QDCMS-57Z****WU52)✓
      续验成功 ✓  解绑成功(剩余换绑 4 次)✓  解绑后可在新域名激活 ✓
      不存在的授权码被拒 not_found ✓
    
    B 段(CMS 侧 21 项全通过):
      ★CMS 在线激活成功 ✓  状态 active 且域名正确(剩余 364 天)✓  授权码脱敏展示 ✓
      ★onlineLicenseValid=true ✓  ★isLicensed=true(在线授权生效)✓  ★checkRemote 真实可用 ✓
      ★CLI 场景:缺少域名时给出可操作提示 ✓  显式传域名可激活成功 ✓
      手动续验 ✓  6 小时内重复续验走缓存(不打官网)✓
      未配置官网地址/官网不可达 → 提示清晰 ✓
      ★被吊销后续验失败并说明原因 ✓  ★到期后续验失败 ✓
      续验失败不清空本地状态(保留便于排查)✓
      测试授权码/日志已删除、配置已复位、库内零脏数据 ✓

    官网页面全量回归:10 个前台页面 + 8 个后台页面 = 18 个页面全部 HTTP 200 且零 PHP 报错 ✓

    三、开发中发现并修掉的 6 个真实缺陷

    #缺陷后果修法
    1admin/includes/layout.php 用 dirname(__DIR__) 找内核整个后台 Fatal(登录都进不去)改为上溯两级
    2admin/login.php 同样路径写错登录页 Fatal改为 __DIR__ . '/includes/layout.php'
    3admin/index.php 重复定义 offStatusTag()仪表盘 Cannot redeclare删除重复定义(统一放 layout)
    4官网内核 e()/money()/fmtDate() 等与主站同名两者同进程加载时 Cannot redeclare全部加 function_exists 守卫,官网内核可安全嵌入
    5LicenseManager::onlineConfig() 走 getSetting 静态缓存点"在线激活"提示成功、但状态卡仍显示未配置改为直连数据库读取
    6getCurrentDomain() 只读 HTTP_HOSTCLI/计划任务下激活报"域名不能为空"增加回退链(SERVER_NAME→已绑定域名→site_url→SITE_URL),并支持显式传域名

    另外:子代理还发现并补了一处业务安全漏洞 —— 已取消的订单仍可发码(UI 只是隐藏了按钮),已加服务端守卫。

    四、使用步骤

    1. 官网:浏览器打开 http://你的域名/official/;后台 .../official/admin/(初始账号 admin,首次安装密码见安装输出,请立即在「站点设置」修改);
    2. 发码:官网后台 →「授权码管理 → 生成授权码」(或在「订单管理」里一键发码);
    3. 激活:客户站点后台 →「商业授权」→ 填官网地址(http://你的域名/official)与授权码 → 在线激活;
    4. 续验/换域名:同页面点「立即续验」「解绑换域名」;
    5. 插件市场:官网「插件市场」展示 12 个插件,可在后台维护上架/版本/价格/安装说明。
  • v0.4.57

    交付包与说明文档的站点名称统一为「奇点CMS」

    随交付包发布

    需求:"打包说明站点名称改为『奇点CMS』"。

    查看完整变更

    需求:"打包说明站点名称改为『奇点CMS』"。

    一、依据(你们自己的打包约定)

    docs/打包说明.md 第 312 行原文:

    站点名称 SITE_NAMEconfig/config.php奇点CMS打包的站点默认名称为"奇点CMS",交付包必须使用该通用名称;客户个性化站名由客户安装后自行修改,不得将任何客户特定站名带入交付包

    生效版本:自 v0.3.80 起。

    核对后发现:SITE_NAME 常量早已是「奇点CMS」,但包内仍有多处旧名残留,其中还有功能性缺陷:

    #位置问题
    1database.sql新装默认站点名竟写入 墨香书阁、页脚写入 Powered by QDCMS —— 客户装完看到的是旧名(真正的问题)
    2includes/footer.php页脚兜底文案 Powered by X-Dream CMS
    3admin/settings.phpSEO 标题占位提示 "如:墨香书阁 - 在线小说阅读平台"
    4install/index.php安装向导标题 QDCMS 安装向导
    5includes/OpsAgent.php / admin/ajax-workbench.phpAI 人设自称 QDCMS;OpsTools 体检报告标题 # QDCMS 站点体检报告
    6assets/js/agent.jsAI 回复兜底版本名 X-Dream CMS
    7文档标题 ×5、代码/脚本/SQL 头注释 ×60+仍为 X-Dream CMS

    二、改动(共 60 个文件、84 处)

    • 新装默认值:站点名 / 页脚 → 「奇点CMS」;
    • 用户可见文案:安装向导标题、SEO 占位提示、AI 人设(后台助手/运维助手)、体检报告标题、AI 回复兜底版本名、对话导出标题、运维巡检日报标题、qdcms-ffmpeg-win.ps1 与各 JS 头注释;
    • 文档标题:README、打包说明、安装配置说明、Windows 部署说明、架构设计、版本升级说明、网站BUG修复规范、页面模块规范、聊天说明、Go 服务 README → 「奇点CMS」;
    • 明确不改(避免破坏功能与历史):
    • 技术标识:x-dream-go / x-dream-go.exe、qdcms-*.ps1 脚本名、QDCMS-v*.zip 包名正则、assets/images/qdcms-logo.png、数据库名、C:\ProgramData\QDCMS\reports 目录;
    • install/install.lock 内容(X-Dream CMS Installed,被安装锁逻辑使用);
    • 历史文档正文:docs/版本升级说明.md、docs/网站BUG修复.md 中的历史条目原文,以及 docs/打包说明.md 中记录"v0.3.79 及更早沿用旧名属已确认例外"的约定正文。

    三、验证

    包内品牌核对(13 项):
      config/config.php  SITE_NAME = 奇点CMS ✓
      database.sql       新装默认站点名 = 奇点CMS ✓   默认页脚 = Powered by 奇点CMS ✓
      includes/footer.php 兜底 = Powered by 奇点CMS ✓
      文档标题:README / 打包说明 / 安装配置说明 / Windows部署说明 / 版本升级说明 均为「奇点CMS」✓
      AI 人设:奇点CMS 的网站运维助手 ✓   奇点CMS 后台的助手 ✓
      体检报告标题:# 奇点CMS 站点体检报告 ✓    安装向导标题:奇点CMS 安装向导 ✓
    语法:PHP 全部文件 php -l 通过 ✓   PowerShell 脚本 Parser 解析通过 ✓
    剩余"用户可见旧名":0 处(仅保留打包约定文档中记录历史例外的正文)✓
  • v0.4.56

    优化服务器资源调用、减少内存占用

    随交付包发布

    需求:"优化网站在网站服务器的资源调用,减少内存占用"。

    查看完整变更

    需求:"优化网站在网站服务器的资源调用,减少内存占用"。

    一、先量后改(本机 7.73 GB 内存)

    指标实测结论
    物理内存已用 6.75 GB / 7.73 GB(87.2%),可用 1.01 GB;页面文件已用 13.65 GB内存确实紧张 ✓
    PHP 单请求峰值内存4 MB,耗时 15~51ms,加载 24 个文件★ 站点代码本身很省(无需改代码)
    php-cgi20 个进程 / 521 MB(父进程 nginx_server=宝塔进程池)★ 是进程池太大,不是负载
    MySQLmax_connections=500 ✗、max_allowed_packet=1GB(my.ini 里竟写着 100G)✗、key_buffer_size=64M(本站全 InnoDB,用不上)✗、performance_schema=ON ✗★ 配置是"大服务器"模板
    其他进程非服务器软件合计 3048 MB(含本 Agent 工具 1240MB、Edge 598MB、手机助手 275MB、Defender 272MB、vivo 199MB、Dell 166MB)用户侧可释放

    二、已做的优化(MySQL,全部在线生效并持久化)

    用 MySQL 8 的 SET PERSIST(同时写入 mysqld-auto.cnf,重启后依然有效):

    参数原值现值说明
    max_connections50080每个连接都会预留缓冲;本站并发极低
    max_allowed_packet1 GB(my.ini 里写 100G)64 MB上传走 4MB 分片,64MB 绰绰有余;这项决定连接级提交内存上限
    key_buffer_size64 MB16 MB该参数只服务 MyISAM,本站表全是 InnoDB
    tmp_table_size64 MB32 MB并发查询时按查询累加
    innodb_log_buffer_size32 MB16 MB—

    performance_schema=OFF 已写入 my.ini(含备份),但它属于启动参数,需重启 MySQL 才生效 —— 生效后可再省 150~300 MB。

    三、新增运维工具:服务器资源与内存

    includes/OpsTools.php 新增 server_memory 工具(已注册进工具目录与"一键体检"), 在后台「工作面板 → ③ 运维工具」点一下即可看到:

    • 物理内存/页面文件占用(已用%、可用量)
    • PHP 进程池进程数与占用
    • MySQL 关键内存参数(连接上限、packet、key_buffer、tmp_table、performance_schema 状态)
    • 进程占用 Top 15
    • 非服务器软件占用合计(含进程名与体积)
    • 自动给出可执行的省内存建议(例如"进程池 20 个,建议降到 6~8,约省 144MB")

    四、验证

    $ OpsTools::run('server_memory')
      概要: 内存 6.75 GB / 7.73 GB(已用 87.2%,可用 1010 MB);PHP 进程池 20 个 521MB;MySQL 连接上限 80
      MySQL: buffer_pool=256MB, max_connections=80, max_allowed_packet=64MB,
             key_buffer=16MB, tmp_table=32MB, performance_schema=ON(待重启)
      建议 4 条:可用内存低于15% / PHP 进程池偏大 / performance_schema 待关 / 3048MB 非服务器软件可关闭

    MySQL 新连接复核(会话值随新连接刷新,确认不是"只改了会话"): max_connections=80 ✓ max_allowed_packet=64MB ✓ tmp_table_size=32MB ✓ key_buffer_size=16MB ✓ innodb_log_buffer_size=16MB ✓

    新增工具已并入"一键体检"清单,共 11 个工具。

    五、还想再省内存?两条可选(都在你手上)

    1. 重启一次 MySQL(宝塔 → 数据库 → 重启),让 performance_schema=OFF 生效 → 再省 150~300 MB;
    2. 宝塔 → PHP 设置里把进程数降到 6~8(本站流量很低,20 个是浪费)→ 再省 约 144 MB;
    3. 不用时可关闭 Edge / 手机助手 / vivo 助手 / Dell 支持助手 等非服务器软件 → 最多可释放 约 1.8 GB。
  • v0.4.55

    修复全站客户端加载缓慢

    随交付包发布

    现象:全站页面"打开后图片/内容慢慢才出来",尤其首页与动态广场。

    查看完整变更

    现象:全站页面"打开后图片/内容慢慢才出来",尤其首页与动态广场。

    一、先量后改(关键数据)

    指标实测判断
    服务端 TTFB首页 0.098s、其他页 0.04~0.11s服务端不慢 ✓
    HTML 大小9.6~44 KB,gzip 后 6 KB正常 ✓
    gzip(真实入口 65500 + 域名)style.css 26987→7039、HTML 38722→6151本来就是好的 ✓
    静态资源缓存Cache-Control: max-age=2592000 + ETag正常 ✓
    外部 CDN / 字体0 个无外链阻塞 ✓
    首页图片6 张原图 = 886 KB,单张最大 403 KB★ 元凶

    二、根因(两处叠加)

    1. 图片加速器正则漏掉了带前导斜杠的写法 ✗ includes/fn-core.php 的 imageAcceleratorBuffer() 只匹配 src="uploads/…", 而大量模板(首页、列表页)输出的是 src="/uploads/…" —— 于是这些图片完全绕过加速器, 既不压缩、也不走 30 天缓存、也不做懒加载,直接下发原图。
    2. 首页卡片代码直连原图 ✗ index.php 的热门动态卡片用 baseUrl() . 原图路径 直接输出 —— 实测单张 403 KB。

    顺带确认:站内的 img-proxy.php 本身实现良好(磁盘缓存 + ETag + 30 天头), 同一张 394 KB 原图经它 400px 处理后只有 40.8 KB,命中缓存仅 7.6 ms —— 只是没被用上。

    三、改动

    #文件改动
    1includes/fn-core.php加速器正则扩宽为接受 uploads/、/uploads/、http(s)://…/uploads/、//host/uploads/ 四种写法;已是代理 URL 的原样跳过(防重复代理);thumb_* 缩略图按卡片尺寸(400px)压缩而不是按原图尺寸重编码;补 decoding="async" 减少主线程解码阻塞
    2index.php首页热门动态卡片改用 imgUrl($path, 400, 'cover'),直接走 400px 代理版本

    四、效果(同一入口实测)

    页面修复前修复后降幅
    首页图片886 KB(6 张原图直连)206 KB(6 张走代理,单张 22~46 KB)−77%
    动态广场每张缩略图 ~90 KB 直连走代理 ~44 KB 且懒加载−50%(加上懒加载首屏更低)
    其他含图页面同样绕过加速器统一走代理同量级下降

    五、验证 → 13 / 13 通过

    A. 加速器正则:uploads/ ✓  /uploads/(修复点)✓  http://…/uploads/ ✓  //host/uploads/ ✓
       静态资源不动 ✓  已是代理 URL 原样返回(不嵌套)✓
    B. 首页图片:6 张全部走代理 ✓  无 404 ✓  ★ 总量 206.2 KB < 300 KB(修复前 886 KB)✓
    C. 全站回归:首页/动态/短视频/短剧/小说/问答/百科/资讯/登录/分类 共 10 个页面全部 HTTP 200、无 PHP 报错 ✓
    D. 代理图片带 30 天缓存头 ✓  返回 image/jpeg ✓

第 1 / 10 页 · 每页 10 条 · 共 93 条

升级前请确认

  1. 备份

    备份站点目录与数据库,尤其是 uploads/ 与 config/。

  2. 阅读说明

    在 docs/版本升级说明.md 中找到对应版本,确认是否需要执行数据库迁移。

  3. 执行升级

    解压覆盖站点目录 → 执行 migration → 后台「系统 → 在线更新」复核版本状态。

  4. 复核功能

    检查前台首页、播放、支付与后台工作面板等关键入口是否正常。

相关入口

站点公告 官网试运行中,如需购买或试用请通过「联系我们」留言。