去评论
dz插件网

Discuz! X5.0 DZ X5.0新版discuz去云控本地化越狱补丁开发者本地开发设计上帝视角补丁独家发布指南

惧愁人
2025/11/29 20:37:54
[md]## 一、X3.5 与 X5.0:目录与架构的关键差异

**X3.5 目录索引:「入口 PHP + /source 分层 + /data + /template」架构。**

**对比官方 X5.0 文档和 MitFrame 分支的源码,大致有几个结构层面的变化:**

### 1. MitFrame 的核心变化

* `/source/module/*` → 被并入各个 App 的子目录
  * **X3.5:**`/source/module/forum/*`、`/source/module/home/*`
  * **X5.0:统一到 **`/source/app/app/forum/module/*`、`/source/app/app/home/module/*` 等。
* `/source/include/*` → 拆分为全局 child 与 App child
  * **全局子文件:**`/source/child/*`
  * **各 App 子文件:**`/source/app/app/<app>/child/*`
* **管理后台入口与路由:**
  * **X3.5:**`admin.php?action=xxx` → `/source/admincp/admincp_xxx.php`
  * **X5.0:**`admin.php?action=app&operation=xxx:yyy` → `/source/app/admin/child/xxx/yyy.php` **对应的总调度在:**`/source/app/admin/admin.php`
* **首页和插件访问:**
  * **X3.5:**`forum.php`/`portal.php`/`plugin.php?id=sample:foo`
  * **X5.0:统一为 **`index.php?app=forum`、`index.php?app=portal`,当 `/source/app` 中无对应 app 时,`plugin.php?id=xxx:yyy` 等价于 `index.php?app=xxx&module=yyy`

### 2. 云应用 / 云平台相关文件的位置变化

**X5.0 源码包里查找到云应用相关文件的「旧 → 新」对应关系大致如下:**

| **X3.5 文件(原补丁覆盖对象)**        | **X5.0 对应位置 / 职责**                                                                                                                             |
| -------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `source/admincp/admincp_cloudaddons.php`   | `source/app/admin/module/cloudaddons.php`+`source/app/admin/child/cloudaddons/*`                                                                       |
| `source/admincp/admincp_index.php`         | **管理后台总入口逻辑:**`source/app/admin/admin.php`+`source/app/admin/child/index/*`                                                            |
| `source/admincp/admincp_main.php`          | **后台首页/概览、站点信息:集中在** `source/app/admin/child/index/function.php`等                                                                  |
| `source/admincp/admincp_menu.php`          | **菜单构造转移到** `source/function/function_admincp.php`+`source/i18n/*/lang_admincp_menu.php`+`source/function/cache/cache_admincp_menu.php` |
| `source/admincp/admincp_plugins.php`       | **插件管理拆成多个子模块:**`source/app/admin/child/plugins/*`                                                                                     |
| `source/admincp/admincp_styles.php`        | **模板与风格管理:**`source/app/admin/child/styles/*`+`source/app/admin/child/setting/styles.php`                                                |
| `source/function/function_cloudaddons.php` | **X5.0 仍然存在,继续负责云应用下载、md5 校验、写入** `/data/addonmd5/*.xml`等逻辑                                                                 |

**特别是云应用部分,在 X5.0 中已经确认存在如下云控化文件:**

* `source/app/admin/module/cloudaddons.php`
* `source/app/admin/child/cloudaddons/` 目录下若干子操作:** **`download.php / location.php / witframe.php / index.htm`
* `source/function/function_cloudaddons.php`(仍然包含 `cloudaddons_open`、`cloudaddons_getmd5`、`dmkdir(DISCUZ_DATA.'./addonmd5')` 等逻辑)

**这说明:** **X5.0 并没有完全云应用,而是在 MitFrame 架构下重组为一套 App + child 模块体系,核心函数仍由 `function_cloudaddons.php` 提供。**

---

## 二、对照 X3.5 补丁:逐文件的语义映射

**原 X3.5 越狱补丁的所有核心功能,已经完全可以逐条PJ到 X5.0 的对应模块上。**

### 1. `admincp_cloudaddons.php` → X5.0 `cloudaddons` 模块

**X3.5 补丁的主要作用:**

1. **去掉错误 102 / 105 日志上报和云端依赖,避免因为访问应用中心慢/失败导致后台异常。**
2. **删除 **`cloudaddons_deltree($tmpdir);`、`@rmdir($dir);` 等自删除临时目录逻辑,保留本地缓存包。
3. **不允许 **`@unlink($entrydir.'/'.$pluginarray['installfile']);` / `upgradefile` 等删除安装、升级脚本的行为。

**在 X5.0 中:**

* **这些行为拆到:**
  * `source/app/admin/module/cloudaddons.php`(统一入口、调度)
  * `source/app/admin/child/cloudaddons/*.php`(具体操作:下载、定位、WitFrame 云插件等)
* **底层文件/目录处理仍然通过 **`function_cloudaddons.php` 提供的工具函数,以及本地 `dir_clear()` 辅助。

**映射策略:**

* **在 **`module/cloudaddons.php` 与 child 脚本中:
  * **屏蔽/改写所有调用 **`cloudaddons_open()` 向远端上报 site 信息、check/update 的分支。
  * **精简/短路 102/105 等错误分支,改为仅本地提示,不回连云。**
* **在 **`function_cloudaddons.php` 中:
  * **保留 **`dmkdir(DISCUZ_DATA.'./addonmd5/')` 与 `file_put_contents(...addonmd5/$md5file.xml)`,保证本地 md5 XML 完整留存。
  * **将所有 **`@unlink(...)` / `cloudaddons_cleardir(...)` / 删除 `data/addonmd5` 下 XML 的逻辑改为「仅清理确实不再使用的临时目录」,**绝不自动删除 md5 XML 和已经下载好的安装包**。
  * **保证所有远程调用(**`cloudaddons_open`)都可以被「本地模式」短路,最多输出调试信息,不对外发起 HTTP。

**这样能保持本地化核心去云控:****本地留痕、禁止自杀、禁止回流云平台**。

### 2. `admincp_index.php` / `admincp_main.php` → X5.0 后台首页

**X3.5 补丁中:**

* `$newversion` 相关代码被注释,取消云端新版本检测,避免后台首页出「有更新」提示。
* `$filecheckresult` 强制设成 `0`,不在首页提示文件校验异常(做了大量二开的情况下避免也被强制检测)。
* **一些到云平台的链接(包括应用中心)被改为本地页,或直接干掉。**

**在 X5.0:**

* **后台总入口逻辑在 **`source/app/admin/admin.php`;
* **首页相关逻辑在 **`source/app/admin/child/index/function.php` 等。

**映射策略:**

* **在 **`admin.php` 中:
  * **关闭任何通过 **`cloudaddons` 或远端接口获取新版本信息的调用。
  * **将所有直接指向应用中心 / WitFrame 云商店的链接,统一改指向本地介绍页或直接移除。**
* **在 **`child/index/function.php` 中:
  * `$newversion`、`$upgradeurl`、`$filecheckresult` 类字段全部本地化:
    * `filecheckresult` 固定为 0。
    * **版本更新信息可显示「本地版本号」但不从云拉取。**
  * **所有「去云端检测更新/安全」的统计链接都加上 **`rel="noreferrer"`,并改指本地说明页或隐藏。

### 3. `admincp_menu.php` → X5.0 管理菜单

**X3.5 补丁中:**

* **去掉顶部「应用中心」独立菜单。**
* **禁止云端推荐菜单项注入(**`$recommendaddon` 等)。
* **修正所有指向应用中心的菜单项到本地页面。**

**X5.0 中:**

* **管理菜单定义主要在:**
  * `source/function/function_admincp.php`
  * **语言与缓存:**`source/i18n/SC_UTF8/lang_admincp_menu.php` + `source/function/cache/cache_admincp_menu.php`

**映射策略:**

* **在 **`function_admincp.php` 中:
  * **从菜单注册数组中移除/屏蔽与「云应用中心」「WitFrame 市场」相关的一级菜单项。**
  * **确保不会动态从远端注入菜单(如果有相关逻辑)。**
* **在语言文件和缓存中:**
  * **可选:保留语言项,但菜单项不再使用这些 key。**
  * **首次构建菜单缓存(**`cache_admincp_menu.php`)时确保这些菜单项不会被写入。

### 4. `admincp_plugins.php` / `admincp_styles.php` → X5.0 插件 & 模板管理

**X3.5 补丁中两点尤其关键:**

* **禁止插件 / 模板列表中的「云检测」「云推荐」「云升级」:**
  * `addoncheck_plugin`、`plugins_validator`
  * `cloudaddons_getmd5`、`cloudaddons_upgradecheck`
* **允许在「插件设计模式」下导出****带语言包的完整 XML**(`langexists` 相关逻辑调整),方便本地开发者打完全包。

**X5.0 中对应模块:**

* **插件管理:**`source/app/admin/child/plugins/*`
* **模板/风格管理:**`source/app/admin/child/styles/*`、`source/app/admin/child/setting/styles.php`

**映射策略:**

* **在 **`child/plugins/*` 中:
  * **注释/短路 **`upgradecheck.php`、`plugininstall_upgrade.php` 的所有云检查逻辑,改为仅本地校验文件完整性。
  * **保留「导出插件」时的 language 打包增强逻辑(依原 X3.5 补丁中的行为,继续支持导出带语言包 XML)。**
  * **去掉所有指向云平台的 URL 和 **`cloudaddons_*` 相关调用。
* **在 **`child/styles/*` 中:
  * **取消从云端拉取推荐模板、云升级检测(**`upgradecheck`)等。
  * **如果 X5.0 中继续使用 **`cloudaddons_getmd5` 管理模板升级 md5,完全屏蔽远端交互,仅保留本地 md5 记录。

### 5. `function_cloudaddons.php` → 核心引擎延续

**原X3.5 补丁在这里干了三件大事:**

1. **siteuniqueid 改成本地的 **`$uniqueid`(不再从云端获取),避免站点特征被上传。
2. **所有涉及「上报」「回连」「校验正版」的函数统一返回「本地模式」,例如 **`cloudaddons_open` 不再向云平台发起 HTTP。
3. **禁止任何形式的 md5 XML 和临时应用文件自删除,保证 **`/data/addonmd5/*.xml` 永久保留。

**在 X5.0 中的 **`function_cloudaddons.php`,已经确认:

* **仍然存在 **`$addonsource`、`download_url`、`check_url` 等字段,默认指向 `https://addon.dismall.com` 系列地址;
* **仍然有 **`dmkdir(DISCUZ_DATA.'./addonmd5/')` 与 `file_put_contents(DISCUZ_DATA.'./addonmd5/'.$md5file.'.xml', ...)` 的逻辑,用于本地 md5 记录。

**映射策略:**

* **依照原 X3.5 补丁中的思路,新版架构「X5.0 版 function\_cloudaddons 本地化补丁」:**
  * `cloudaddons_getuniqueid()` → 完全本地生成/缓存,不与云端交互。
  * `cloudaddons_open()` → 兼容参数但在本地模式下直接返回「空结构」或仅用于本地调试,不实际 HTTP 请求。
  * **不再删除 **`/data/addonmd5/*.xml` 与下载的 zip/app 目录,只允许按定义的规则清理真正的临时缓存。
  * **保留/增强 md5 XML 的写入逻辑,保证每次安装/升级的元数据都完整记录。**

---

## 三、最终「X5.0 本地化去云补丁」的整体设计原则

**综合上面的全局校对,X5.0 版补丁最小化不影响核心原则:**

1. **严格对齐 X5.0 官方架构**

   * **所有改动只落在:**
     * `/source/app/admin/admin.php`
     * `/source/app/admin/child/index/*`
     * `/source/app/admin/child/plugins/*`
     * `/source/app/admin/child/styles/*`
     * `/source/app/admin/module/cloudaddons.php`
     * `/source/app/admin/child/cloudaddons/*`
     * `/source/function/function_cloudaddons.php`
     * `/source/function/function_admincp.php`(菜单)
   * **不新增任何不符合 MitFrame 规范的新入口或目录。**
2. **保持 X3.5 补丁语义 1:1 继承**

   * **不上报、不回连、不自毁,所有「去云」行为在 X5.0 中都有对应的一条逻辑路径。**
   * **所有对开发者友好的增强(如带语言包的导出)在 X5.0 中继续保留或重写。**
3. **补丁形态**

   * **和原有的 X3.5 补丁一样:录结构以 X5.0 根目录为基准,如:**
     * `source/app/admin/admin.php`
     * `source/app/admin/child/index/function.php`
     * `source/app/admin/child/plugins/*.php`
     * `source/app/admin/child/styles/*.php`
     * `source/app/admin/module/cloudaddons.php`
     * `source/app/admin/child/cloudaddons/*.php`
     * `source/function/function_cloudaddons.php`
     * `source/function/function_admincp.php`
   * **每个文件内以中文注释标明「X5.0 补丁功能点」与「本地化防云处理逻辑」。**

   **已经独家贡献到DZ插件网换取了VIP见:https://www.dz-x.net/t/3098/1/1.html**
[/md]