php实现歌曲连播
PHP实现歌曲连播功能
实现歌曲连播功能需要结合前端播放器和后端PHP逻辑。以下是关键实现方法:
创建播放列表数据库表
设计数据库表存储歌曲信息:
CREATE TABLE songs (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255),
artist VARCHAR(255),
file_path VARCHAR(255),
duration INT
);
获取播放列表的PHP代码
$conn = new mysqli("localhost", "username", "password", "music_db");
$result = $conn->query("SELECT * FROM songs ORDER BY id");
$playlist = array();
while($row = $result->fetch_assoc()) {
$playlist[] = $row;
}
echo json_encode($playlist);
前端播放器实现
使用HTML5 audio标签配合JavaScript:

<audio id="player" controls></audio>
<script>
let currentTrack = 0;
const playlist = <?php echo json_encode($playlist); ?>;
function playTrack(index) {
const player = document.getElementById('player');
player.src = playlist[index].file_path;
player.play();
}
document.getElementById('player').addEventListener('ended', function() {
currentTrack = (currentTrack + 1) % playlist.length;
playTrack(currentTrack);
});
// 初始播放第一首
playTrack(0);
</script>
实现随机播放功能
$result = $conn->query("SELECT * FROM songs ORDER BY RAND()");
添加进度保存功能
使用localStorage保存播放进度:
// 保存当前播放位置
player.addEventListener('timeupdate', function() {
localStorage.setItem('lastPlayed', currentTrack);
localStorage.setItem('lastTime', player.currentTime);
});
// 恢复播放
window.addEventListener('load', function() {
const lastTrack = localStorage.getItem('lastPlayed');
if(lastTrack) {
currentTrack = parseInt(lastTrack);
playTrack(currentTrack);
player.currentTime = parseFloat(localStorage.getItem('lastTime')) || 0;
}
});
服务器端音频文件处理
确保音频文件可访问并设置正确的MIME类型:

header("Content-Type: audio/mpeg");
readfile($songPath);
性能优化建议
对于大型音乐库,实现分页加载:
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$limit = 20;
$offset = ($page - 1) * $limit;
$result = $conn->query("SELECT * FROM songs LIMIT $limit OFFSET $offset");
安全注意事项
验证用户对音频文件的访问权限,防止目录遍历攻击:
$requestedFile = basename($_GET['file']);
$filePath = '/music_files/' . $requestedFile;
if(!file_exists($filePath)) {
header("HTTP/1.0 404 Not Found");
exit;
}






