程序包能否加入 git历史
关于主程序和插件 或 插件之间的冲突能否自动检测
插件市场能否加入AI审计或者汇报插件市场中添加 插件适配的主程序版本号
忘了
项目github 没了 确实还挺麻烦- bbs1org2026-08-09
@uscncn 第二条「插件之间的冲突能否自动检测」我做成插件了:[conflict_check]插件冲突检测,已发到插件版 topic/301。
后台一个页面,静态分析
app/plugins下所有插件源码,尚未同步和未启用的也一起查。检测项:- 函数重复定义(插件↔插件、插件↔主程序/PHP 内置)
- manifest 声明的回调在插件文件里不存在
- 调用了当前主程序没有的函数(等于替你回答「这插件适配当前版本吗」)
- 数据表重复建表
- 路由 / 后台标签 / 计划任务键冲突,含被主程序路由占用(那种情况插件页面永远打不开)
$GLOBALS键冲突- 同一 Hook 多插件叠加,并列出执行顺序
为什么一定要连「还没启用」的插件一起查:两个插件定义同名函数时,只要文件同时放进
app/plugins,点一下「同步插件」,plugin_registry_sync()里的include就会抛Cannot redeclare。sync 外面那层try/catch (Throwable)捕不到它(函数重复声明是 E_ERROR),结果整站连后台一起 500,只能去删文件才能恢复,而插件压根没被启用过。我用两个测试插件实测复现了:PHP Fatal error: Cannot redeclare zz_shared_helper() (previously declared in .../app/plugins/zz_dup_a/plugin.php:4) in .../app/plugins/zz_dup_b/plugin.php on line 7所以这种检测只有放在「同步之前」才有意义,做成运行时 Hook 已经来不及了。在 v8.5.14 上跑了 7 个真实插件(含 72 个函数的 parsedown_markdown)零误报,另外用专门构造的冲突插件确认 7 类检测都能命中并给出准确的插件 ID 和行号。
其余三条我这边做不到,都要站点方动手,顺便说下摸到的情况:
关于 #2「市场展示适配的主程序版本号」——插件现在没法自己声明。
plugin_manifest_validate()用固定键白名单归一化 manifest(id/name/version/description/author/hooks/routes/admin_tabs/assets/cron/install/uninstall),白名单外的字段会被直接丢掉,所以作者就算写了requires也存不进app_plugins.manifest_json。要支持得先在这个白名单里加个字段。我这插件退一步,用「有没有调用当前主程序不存在的函数」来反推兼容性,不依赖作者声明也能判断。主楼的源码包附带 git 历史、以及市场接入 AI 审计,都在站点侧。审计这块其实已经有「质量报告」机器人了,我前几个插件就是照它的报告改的,往冲突检测方向扩应该不难。