php实现网页录音
PHP 实现网页录音的方法
网页录音通常需要结合前端 JavaScript 和后端 PHP 进行处理。PHP 主要负责接收和保存录音文件,而录音功能本身由前端实现。
前端录音实现
使用 JavaScript 的 MediaRecorder API 进行录音:

// 请求麦克风权限
navigator.mediaDevices.getUserMedia({ audio: true })
.then(function(stream) {
const mediaRecorder = new MediaRecorder(stream);
const audioChunks = [];
mediaRecorder.addEventListener("dataavailable", event => {
audioChunks.push(event.data);
});
mediaRecorder.addEventListener("stop", () => {
const audioBlob = new Blob(audioChunks, { type: 'audio/wav' });
uploadAudio(audioBlob);
});
// 开始录音
mediaRecorder.start();
// 10秒后停止录音
setTimeout(() => {
mediaRecorder.stop();
}, 10000);
});
function uploadAudio(blob) {
const formData = new FormData();
formData.append('audio', blob, 'recording.wav');
fetch('upload.php', {
method: 'POST',
body: formData
});
}
PHP 接收录音文件
创建 upload.php 文件处理上传的录音:

<?php
if (isset($_FILES['audio']) && $_FILES['audio']['error'] === UPLOAD_ERR_OK) {
$uploadDir = 'uploads/';
$filename = uniqid() . '.wav';
$destination = $uploadDir . $filename;
if (move_uploaded_file($_FILES['audio']['tmp_name'], $destination)) {
echo "录音上传成功";
} else {
echo "上传失败";
}
} else {
echo "未接收到录音文件";
}
?>
安全注意事项
设置上传目录权限:
// 确保上传目录存在且可写
if (!file_exists('uploads')) {
mkdir('uploads', 0755, true);
}
// 限制文件类型
$allowedTypes = ['audio/wav', 'audio/x-wav'];
if (!in_array($_FILES['audio']['type'], $allowedTypes)) {
die("不允许的文件类型");
}
// 限制文件大小
$maxSize = 5 * 1024 * 1024; // 5MB
if ($_FILES['audio']['size'] > $maxSize) {
die("文件过大");
}
音频格式转换
如果需要将录音转换为其他格式,可以使用 FFmpeg:
$outputFile = $uploadDir . uniqid() . '.mp3';
exec("ffmpeg -i $destination -acodec libmp3lame $outputFile");
完整流程
- 前端使用 JavaScript 获取麦克风权限并录音
- 将录音数据转换为 Blob 对象
- 通过 FormData 和 fetch API 发送到 PHP 后端
- PHP 接收并验证上传的文件
- 将文件保存到服务器指定目录
- 可选:使用 FFmpeg 进行格式转换
浏览器兼容性说明
MediaRecorder API 在现代浏览器中支持良好,但在 Safari 和旧版浏览器中可能需要 polyfill 或替代方案。建议检查浏览器兼容性并提供备用方案。






