php实现录音功能
PHP 实现录音功能的方法
PHP 本身是服务器端语言,无法直接访问客户端麦克风进行录音。需要通过前端技术(如 JavaScript)捕获音频流,再通过 PHP 处理或存储录音文件。以下是具体实现方案:
前端录音实现(JavaScript + Web Audio API)
使用浏览器提供的 MediaDevices.getUserMedia() 和 MediaRecorder API 捕获音频:

// 请求麦克风权限
navigator.mediaDevices.getUserMedia({ audio: true })
.then(stream => {
const mediaRecorder = new MediaRecorder(stream);
const audioChunks = [];
mediaRecorder.ondataavailable = event => {
audioChunks.push(event.data);
};
mediaRecorder.onstop = () => {
const audioBlob = new Blob(audioChunks, { type: 'audio/wav' });
uploadAudio(audioBlob); // 调用上传函数
};
// 开始/停止录音控制
document.getElementById('startBtn').onclick = () => mediaRecorder.start();
document.getElementById('stopBtn').onclick = () => mediaRecorder.stop();
});
上传录音到服务器(AJAX + PHP)
将前端生成的音频 Blob 通过 FormData 发送到 PHP 后端:
function uploadAudio(blob) {
const formData = new FormData();
formData.append('audio', blob, 'recording.wav');
fetch('upload.php', {
method: 'POST',
body: formData
}).then(response => {
console.log('上传成功');
});
}
PHP 接收并存储录音文件
创建 upload.php 处理上传的音频文件:

<?php
if (isset($_FILES['audio'])) {
$uploadDir = 'recordings/';
$filename = uniqid() . '.wav';
$destination = $uploadDir . $filename;
if (move_uploaded_file($_FILES['audio']['tmp_name'], $destination)) {
echo json_encode(['status' => 'success', 'filepath' => $destination]);
} else {
echo json_encode(['status' => 'error']);
}
}
?>
可选功能扩展
音频格式转换
使用 PHP 的 shell_exec 调用 FFmpeg 转换格式(需服务器安装 FFmpeg):
$outputFile = 'recordings/converted.mp3';
shell_exec("ffmpeg -i $destination -acodec libmp3lame $outputFile");
数据库记录存储
将文件信息存入数据库(如 MySQL):
$stmt = $pdo->prepare("INSERT INTO recordings (filename, path, created_at) VALUES (?, ?, NOW())");
$stmt->execute([$filename, $destination]);
注意事项
- 浏览器兼容性:
MediaRecorder在不同浏览器中支持的音频格式可能不同(通常推荐 WAV 或 OGG)。 - 权限处理:确保用户授权麦克风访问权限,未授权时需提供错误处理。
- 服务器配置:检查 PHP 的
upload_max_filesize和post_max_size设置是否足够。 - HTTPS 环境:现代浏览器要求安全上下文(HTTPS 或 localhost)才能使用麦克风。
完整流程总结
- 前端 JavaScript 捕获麦克风音频流并生成 Blob 对象
- 通过 AJAX 将音频数据发送到 PHP 服务器
- PHP 接收文件并存储到指定目录
- 可选进行格式转换或数据库记录
此方案适用于语音留言、在线访谈等场景,实际部署时需根据具体需求调整参数和错误处理逻辑。






