'未授权']); exit(); } $role = $_SESSION['role'] ?? ''; if ($role !== '班主任') { echo json_encode(['needs_upgrade' => false]); exit(); } // 读取后端 .env 获取数据库配置 $envPath = __DIR__ . '/../../backend/.env'; if (!file_exists($envPath)) { echo json_encode(['error' => '数据库配置文件不存在']); exit(); } $lines = file($envPath, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); $dbConfig = []; foreach ($lines as $line) { $line = trim($line); if ($line === '' || strpos($line, '#') === 0) { continue; } if (strpos($line, '=') !== false) { list($key, $value) = explode('=', $line, 2); $dbConfig[trim($key)] = trim($value); } } $required = ['DB_HOST', 'DB_PORT', 'DB_USER', 'DB_PASSWORD', 'DB_NAME']; foreach ($required as $key) { if (!isset($dbConfig[$key]) || $dbConfig[$key] === '') { echo json_encode(['error' => "缺少数据库配置: {$key}"]); exit(); } } try { $dsn = "mysql:host={$dbConfig['DB_HOST']};port={$dbConfig['DB_PORT']};dbname={$dbConfig['DB_NAME']};charset=utf8mb4"; $pdo = new PDO($dsn, $dbConfig['DB_USER'], $dbConfig['DB_PASSWORD'], [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION ]); // 检测当前版本 $currentVersion = '0.0.0'; try { $stmt = $pdo->query("SELECT setting_value FROM system_settings WHERE setting_key = 'db_version'"); $row = $stmt->fetch(PDO::FETCH_ASSOC); if ($row) { $currentVersion = $row['setting_value']; } } catch (PDOException $e) { // 表不存在,使用默认值 } // 读取目标版本 $versionFile = __DIR__ . '/../../VERSION'; if (!file_exists($versionFile)) { echo json_encode(['error' => 'VERSION 文件不存在']); exit(); } $targetVersion = trim(file_get_contents($versionFile)); $needsUpgrade = version_compare($targetVersion, $currentVersion, '>'); $allVersions = [ '1.7' => 'v1.7.sql', '1.8' => 'v1.8.sql', '2.0' => 'v2.0.sql', '2.0.1' => 'v2.0.1.sql', '2.1' => 'v2.1.sql', ]; $steps = []; foreach ($allVersions as $version => $file) { if (version_compare($version, $currentVersion, '>') && version_compare($version, $targetVersion, '<=')) { $steps[] = ['version' => $version, 'file' => $file]; } } usort($steps, function($a, $b) { return version_compare($a['version'], $b['version']); }); echo json_encode([ 'needs_upgrade' => $needsUpgrade, 'current' => $currentVersion, 'target' => $targetVersion, 'steps' => $steps ]); } catch (PDOException $e) { echo json_encode(['error' => '数据库连接失败: ' . $e->getMessage()]); }