• uscncn

    方便ai快速判断更新内容

    主楼
  • uscncn

    关于主程序和插件 或 插件之间的冲突能否自动检测
    插件市场能否加入AI审计或者汇报

    #1
  • uscncn

    插件市场中添加 插件适配的主程序版本号

    #2
  • uscncn

    忘了
    项目github 没了 确实还挺麻烦

    #3
  • 5151561

    git索引是可以保留的 。 GitHub只是代码托管平台而已

    #5
  • uscncn

    目前下载的程序包都没有git

    #6
  • 5151561

    所以就有点难受了啊

    #7
  • bbs1org

    等github解封吧

    #8
  • 233

    @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 审计,都在站点侧。审计这块其实已经有「质量报告」机器人了,我前几个插件就是照它的报告改的,往冲突检测方向扩应该不难。

    #4

发表回复

登录后回复