php实现录音
PHP实现录音的基本方法
PHP本身是服务器端语言,无法直接操作客户端麦克风进行录音。需要通过前端技术(如JavaScript)捕获音频,再将音频数据传输到PHP后端处理。
前端音频捕获(JavaScript)
使用Web Audio API和MediaDevices接口访问麦克风并录制音频:
// 请求麦克风权限
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);
};
// 开始录制
mediaRecorder.start();
// 10秒后自动停止(示例)
setTimeout(() => mediaRecorder.stop(), 10000);
});
上传音频到PHP后端
使用FormData将音频数据发送到服务器:

function uploadAudio(blob) {
const formData = new FormData();
formData.append('audio', blob, 'recording.wav');
fetch('upload.php', {
method: 'POST',
body: formData
}).then(response => {
console.log('Upload success');
});
}
PHP接收音频文件
创建upload.php处理上传的音频文件:
<?php
if(isset($_FILES['audio'])){
$targetPath = "uploads/" . basename($_FILES['audio']['name']);
if(move_uploaded_file($_FILES['audio']['tmp_name'], $targetPath)){
echo "Audio saved as: " . $targetPath;
} else {
echo "Error saving file";
}
}
?>
音频处理扩展
对于更复杂的音频处理,可以考虑以下方案:

-
使用FFmpeg进行音频格式转换(需服务器安装FFmpeg)
exec("ffmpeg -i input.wav output.mp3"); -
使用音频处理库如PHP-FFMpeg
$ffmpeg = FFMpeg\FFMpeg::create(); $audio = $ffmpeg->open('recording.wav'); $audio->save(new FFMpeg\Format\Audio\Mp3(), 'recording.mp3');
安全注意事项
- 确保上传目录有写入权限但不可执行
- 验证文件类型(检查MIME类型)
- 限制文件大小
- 对上传的文件进行重命名防止路径遍历攻击
完整解决方案架构
- 前端:JavaScript捕获音频并转换为Blob对象
- 通信:通过AJAX/Fetch将音频发送到PHP后端
- 后端:PHP接收并存储音频文件
- 处理:可选使用音频处理工具进行后续操作
- 回放:提供下载链接或播放接口给前端






