为了能快速了解并处理您的问题,请提供以下基础信息:
问题描述:原因找到了,不是官方没发,也不是你的网络,是宝塔前端的一个版本号比较 Bug。
证据链
1)云端列表说得很清楚
{"name":"php-8.5", "version":"8.5.6", "versions":[{"m_version":"8.5","version":"12"}]}
version 是你装的(8.5.6),versions[0].version 是云端最新(12 → 8.5.12)。
2)面板后端返回给浏览器的数据(我在你机器上直接调用面板类复现的)
ITEM: {"name":"php-8.5","version":"8.5.6", "versions":[{"m_version":"8.5","version":"12"}], "update":null}
后端把两个正确的版本号都给了,update 是 null,说明"有没有更新"是前端自己算的。
3)前端判断"有没有更新"的代码
文件:/www/server/panel/BTPanel/static/js/btpanel-panel-business-services-lib.js
else { // 只有 1 个版本号的软件走这个分支 let t = e.versions[0]; let r = `${t.m_version}.${t.version}`; // "8.5.12" if (e.version !== r && n === e.is_beta && e.version < r) return true;}
注意最后那句 e.version < r 是字符串比较,不是版本号比较。
4)字符串比较的实际结果
"8.5.6" < "8.5.12" → false"8.5.7" < "8.5.12" → false"8.5.9" < "8.5.12" → false
逐字符比到第三段时 '6' 大于 '1',所以面板认为 8.5.6 比 8.5.12 更新,更新按钮永远不出现。
对比一下:PHP 8.4 走的是同一个函数,但 "8.4.22" < "8.4.27" 成立,所以 8.4 的更新提示是正常的。这就是为什么只有 8.5 出问题。
具体是从哪一天开始的
从 8.5.10 发布那天起。凡是 8.5.0~8.5.9 的用户,都看不到 8.5.10 之后的任何更新。论坛那位说"停在 8.5.7",完全对得上——他可能 8.5.7→8.5.8/8.5.9 是能看到的,8.5.10 之后就被这个 Bug 吃掉了。
怎么处理(按推荐顺序)方案 A:等官方修(最稳) 把这段代码位置反馈给宝塔即可:Ft 函数里"单版本分支"应该用同文件已有的数值比较函数 b()/x(),而不是 e.version < r。8.4 分支用的就是数值比较。
|
|