[], 'daily_records' => [], 'daily_winner' => [] ]; file_put_contents($file, json_encode($default, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE)); return $default; } $content = file_get_contents($file); $data = json_decode($content, true); if (!is_array($data)) { $data = ['votes' => [], 'daily_records' => [], 'daily_winner' => []]; } // 确保键存在 if (!isset($data['votes'])) $data['votes'] = []; if (!isset($data['daily_records'])) $data['daily_records'] = []; if (!isset($data['daily_winner'])) $data['daily_winner'] = []; return $data; } function saveData($file, $data) { file_put_contents($file, json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE), LOCK_EX); } $data = loadData($dataFile); // 获取用户HWID和IP function getUserHwid() { if (isset($_COOKIE['voter_hwid'])) { return $_COOKIE['voter_hwid']; } $hwid = 'hwid_' . bin2hex(random_bytes(16)); setcookie('voter_hwid', $hwid, time() + (86400 * 365), "/"); return $hwid; } function getUserIp() { if (!empty($_SERVER['HTTP_CLIENT_IP'])) { return $_SERVER['HTTP_CLIENT_IP']; } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { $ips = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']); return trim($ips[0]); } else { return $_SERVER['REMOTE_ADDR'] ?? '0.0.0.0'; } } $hwid = getUserHwid(); $ip = getUserIp(); $today = date('Y-m-d'); $yesterday = date('Y-m-d', strtotime('-1 day')); // 检查今天是否已投票 $hasVotedToday = false; foreach ($data['daily_records'] as $record) { if ($record['hwid'] === $hwid && $record['ip'] === $ip && $record['vote_date'] === $today) { $hasVotedToday = true; break; } } // 检查今日是否已锁盘 $isLocked = false; foreach ($data['daily_winner'] as $winner) { if ($winner['winner_date'] === $today) { $isLocked = true; break; } } // 自动结算昨日结果 $yesterdayWinner = null; $yesterdayHasWinner = false; foreach ($data['daily_winner'] as $winner) { if ($winner['winner_date'] === $yesterday) { $yesterdayHasWinner = true; $yesterdayWinner = $winner; break; } } if (!$yesterdayHasWinner) { // 检查昨日是否有投票 $yesterdayVotes = []; foreach ($data['daily_records'] as $record) { if ($record['vote_date'] === $yesterday && $record['vote_type'] === 'vote') { $gameName = $record['game_name']; if (!isset($yesterdayVotes[$gameName])) { $yesterdayVotes[$gameName] = 0; } $yesterdayVotes[$gameName]++; } } if (!empty($yesterdayVotes)) { arsort($yesterdayVotes); $topGame = array_key_first($yesterdayVotes); $topCount = $yesterdayVotes[$topGame]; $data['daily_winner'][] = [ 'winner_date' => $yesterday, 'game_name' => $topGame, 'vote_count' => $topCount ]; saveData($dataFile, $data); $yesterdayWinner = [ 'winner_date' => $yesterday, 'game_name' => $topGame, 'vote_count' => $topCount ]; } } // 处理投票请求 $message = ''; $messageType = ''; if ($_SERVER['REQUEST_METHOD'] === 'POST' && !$hasVotedToday && !$isLocked) { $action = $_POST['action'] ?? ''; $gameName = trim($_POST['game_name'] ?? ''); if (($action === 'vote' || $action === 'add_new') && !empty($gameName)) { // 检查游戏是否已存在 $gameExists = false; $gameIndex = -1; foreach ($data['votes'] as $index => $vote) { if ($vote['game_name'] === $gameName) { $gameExists = true; $gameIndex = $index; break; } } if ($action === 'vote') { if ($gameExists) { $data['votes'][$gameIndex]['vote_count']++; } else { $data['votes'][] = [ 'game_name' => $gameName, 'vote_count' => 1, 'created_at' => date('Y-m-d H:i:s') ]; } $voteType = 'vote'; } else { // add_new if ($gameExists) { $message = "该游戏已存在,请直接投票"; $messageType = 'error'; } else { $data['votes'][] = [ 'game_name' => $gameName, 'vote_count' => 1, 'created_at' => date('Y-m-d H:i:s') ]; $voteType = 'add'; } } if ($messageType !== 'error') { // 记录今日投票 $data['daily_records'][] = [ 'hwid' => $hwid, 'ip' => $ip, 'vote_date' => $today, 'vote_type' => $voteType, 'game_name' => $gameName, 'created_at' => date('Y-m-d H:i:s') ]; saveData($dataFile, $data); $message = "投票成功,您投给了「" . htmlspecialchars($gameName) . "」"; $messageType = 'success'; $hasVotedToday = true; } } } // 获取所有投票数据,按票数降序 $allVotes = $data['votes']; usort($allVotes, function($a, $b) { if ($b['vote_count'] === $a['vote_count']) { return strcmp($a['game_name'], $b['game_name']); } return $b['vote_count'] - $a['vote_count']; }); // 获取今日投票记录 $todayRecords = []; foreach ($data['daily_records'] as $record) { if ($record['vote_date'] === $today) { $todayRecords[] = $record; } } usort($todayRecords, function($a, $b) { return strtotime($b['created_at']) - strtotime($a['created_at']); }); // 获取历史冠军(最近7条) $pastWinners = $data['daily_winner']; usort($pastWinners, function($a, $b) { return strtotime($b['winner_date']) - strtotime($a['winner_date']); }); $pastWinners = array_slice($pastWinners, 0, 7); ?>
暂无投票
今天还没有人投票