diff --git a/src/app/event/init/InitAddon.php b/src/app/event/init/InitAddon.php index fb6a53b1e..684a45fa6 100644 --- a/src/app/event/init/InitAddon.php +++ b/src/app/event/init/InitAddon.php @@ -33,11 +33,48 @@ class InitAddon $addon_model = new Addon(); $addon_data = $addon_model->getAddonList([], 'name'); $current_addons = $addon_data['data']; - $current_addon_names = array_column($current_addons, 'name'); + $db_addon_names = array_column($current_addons, 'name'); // 1. 记录总的addon数量和名称 - $total_addons = count($current_addon_names); - log_write("[Addon Init] 总插件数量: {$total_addons}, 插件列表: " . implode(', ', $current_addon_names), 'info'); + $total_addons = count($db_addon_names); + log_write("[Addon Init] 从数据表addon, 获得的总插件数量: {$total_addons}, 插件列表: " . implode(', ', $db_addon_names), 'info'); + + // 2. 从addon目录读取插件列表 + $dir_addon_names = []; + $addon_dir = 'addon/'; + if (is_dir($addon_dir)) { + $dir_handle = opendir($addon_dir); + if ($dir_handle) { + while (($file = readdir($dir_handle)) !== false) { + if ($file != '.' && $file != '..' && is_dir($addon_dir . $file)) { + $dir_addon_names[] = $file; + } + } + closedir($dir_handle); + sort($dir_addon_names); + } + } + $total_dir_addons = count($dir_addon_names); + log_write("[Addon Init] 从addon目录, 获得的总插件数量: {$total_dir_addons}, 插件列表: " . implode(', ', $dir_addon_names), 'info'); + + // 3. 比较数据库和目录插件列表的差异 + $db_only_addons = array_diff($db_addon_names, $dir_addon_names); + $dir_only_addons = array_diff($dir_addon_names, $db_addon_names); + + if (!empty($db_only_addons)) { + log_write("[Addon Init] 数据库中存在但目录中不存在的插件: " . implode(', ', $db_only_addons), 'warning'); + } + + if (!empty($dir_only_addons)) { + log_write("[Addon Init] 目录中存在但数据库中不存在的插件: " . implode(', ', $dir_only_addons), 'warning'); + } + + if (empty($db_only_addons) && empty($dir_only_addons)) { + log_write("[Addon Init] 数据库和目录中的插件列表一致", 'info'); + } + + // 使用数据库中的插件列表进行后续处理 + $current_addon_names = $db_addon_names; // 2. 记录缓存中不存在但实际存在的addon $cache_addon_names = [];