上传音乐
您好,。您已登录,上传将自动记录您的昵称。 您当前未登录,上传后将以“匿名用户”身份显示。登录后可获得更完整的服务。
'粤语歌曲', 'mandarin' => '国语歌曲', 'waiyu' => '外语歌曲', 'classic' => '经典老歌', 'other' => '其他音乐' ]; // 检查用户是否登录 $isLoggedIn = isset($_SESSION['user_logged_in']) && $_SESSION['user_logged_in'] === true; $uploaderName = $isLoggedIn ? $_SESSION['user_info']['username'] : '匿名用户'; // 处理上传 if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['upload_music'])) { // 验证表单数据 $title = trim($_POST['title'] ?? ''); $artist = trim($_POST['artist'] ?? ''); // 如果用户已登录,强制使用会话中的用户名,忽略表单提交的值 $uploader = $isLoggedIn ? $_SESSION['user_info']['username'] : trim($_POST['uploader'] ?? '匿名用户'); $category = $_POST['category'] ?? 'other'; $description = trim($_POST['description'] ?? ''); $bvid = trim($_POST['bvid'] ?? ''); $duration = trim($_POST['duration'] ?? ''); // 验证时长格式 if (!empty($duration) && !preg_match('/^\d+:\d{2}$/', $duration)) { $message = "时长格式不正确,请使用 MM:SS 格式(例如 3:45 表示3分45秒)"; $message_type = "error"; } elseif (empty($title) || empty($artist)) { $message = "歌曲名和歌手名不能为空"; $message_type = "error"; } elseif (!isset($_FILES['audio_file']) || $_FILES['audio_file']['error'] !== UPLOAD_ERR_OK) { $message = "请选择要上传的音频文件"; $message_type = "error"; } else { // 验证BV号格式 if (!empty($bvid) && !preg_match('/^BV[0-9A-Za-z]+$/', $bvid)) { $message = "BV号格式不正确,应为以BV开头的字符串(如BV1Va4y1n7HN)"; $message_type = "error"; } else { // 处理文件上传 $upload_dir = 'uploads/'; if (!is_dir($upload_dir)) { mkdir($upload_dir, 0755, true); } $file_ext = pathinfo($_FILES['audio_file']['name'], PATHINFO_EXTENSION); $allowed_ext = ['mp3', 'wav', 'flac', 'm4a']; if (!in_array(strtolower($file_ext), $allowed_ext)) { $message = "不支持的文件格式,仅支持mp3, wav, flac, m4a"; $message_type = "error"; } else { // 检查文件大小(限制30MB) $max_file_size = 30 * 1024 * 1024; // 30MB if ($_FILES['audio_file']['size'] > $max_file_size) { $message = "文件大小超过限制(30MB)"; $message_type = "error"; } else { // 生成唯一文件名 $file_name = uniqid('music_') . '.' . $file_ext; $target_path = $upload_dir . $file_name; if (move_uploaded_file($_FILES['audio_file']['tmp_name'], $target_path)) { // 使用用户输入的时长,如果为空则使用默认值 $final_duration = !empty($duration) ? $duration : "0:00"; // 保存到待审核表 try { $stmt = $conn->prepare("INSERT INTO pending_music (uploader_name, title, artist, category, description, file_path, duration, upload_time, bvid) VALUES (?, ?, ?, ?, ?, ?, ?, NOW(), ?)"); $stmt->execute([$uploader, $title, $artist, $category, $description, $target_path, $final_duration, $bvid]); $message = "上传成功,已进入待审核队列,感谢您的分享!"; $message_type = "success"; // 清空表单 $_POST = []; } catch (PDOException $e) { $message = "数据库错误: " . $e->getMessage(); $message_type = "error"; unlink($target_path); // 数据库错误时删除已上传文件 } } else { $message = "文件上传失败"; $message_type = "error"; } } } } } } ?>