已安装插件

已启用'; } elseif ($rinstalled) { $statusBadge = '已停用'; } else { $statusBadge = '未安装'; } // overwrite 基线漂移告警(核心升级改动被覆盖文件 → 插件副本可能已过时) $owChanged = (array)($row['ow_changed'] ?? array()); $owMissing = (array)($row['ow_missing'] ?? array()); $owTotal = (int)($row['ow_total'] ?? 0); $owBadge = ''; if (!empty($owChanged) || !empty($owMissing)) { $owDetail = htmlspecialchars(implode("\n", array_merge( array_map(function ($f) { return '已变动: ' . $f; }, $owChanged), array_map(function ($f) { return '已消失: ' . $f; }, $owMissing) )), ENT_QUOTES, 'UTF-8'); $owBadge = ' 覆盖文件已过时(' . count($owChanged) . '/' . count($owMissing) . ')'; } elseif ($owTotal > 0) { $owBadge = ' 覆盖' . $owTotal . '文件'; } ?>
目录 名称 版本 状态 操作
暂无插件(插件目录 plugins/ 为空)
0 || $sUp > 0)) { $bits = array(); if ('' !== $sAuthor) $bits[] = '作者 ' . $sAuthor; if ($sDl > 0) $bits[] = '下载 ' . $sDl; if ($sUp > 0) $bits[] = '更新于 ' . date('Y-m-d', $sUp); echo '
' . htmlspecialchars(implode(' · ', $bits), ENT_QUOTES, 'UTF-8') . '
'; } $sBrief = (string)($row['brief'] ?? ''); if ('' !== $sBrief) { echo '
' . htmlspecialchars($sBrief, ENT_QUOTES, 'UTF-8') . '
'; } if (!$rinstalled && empty($row['in_store'])) { // 商店拉取失败时不能断言「未收录」(旧实现两者不可分辨,会误导) echo empty($store_ok) ? '
商店暂不可达,无法确认是否收录
' : '
商店未收录(可上传 zip 安装)
'; } ?>
设置

上传安装插件

包结构要求:zip 内为单一插件目录(含 conf.json)。上传成功后插件为"未安装"状态,需在列表中依次"安装→启用"。禁止上传包含软链/点文件/可执行脚本的包。