php实现录音
PHP 实现录音的基本方法
PHP 本身是服务器端语言,无法直接录制客户端音频。需要结合前端技术(如 JavaScript)和服务器端处理来实现完整的录音功能。
前端录音实现
使用 JavaScript 的 MediaRecorder API 可以捕获用户麦克风输入:
<button id="start">开始录音</button>
<button id="stop" disabled>停止录音</button>
<script>
let mediaRecorder;
let audioChunks = [];
document.getElementById('start').addEventListener('click', async () => {
const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
mediaRecorder = new MediaRecorder(stream);
mediaRecorder.ondataavailable = event => {
audioChunks.push(event.data);
};
mediaRecorder.start();
document.getElementById('stop').disabled = false;
});
document.getElementById('stop').addEventListener('click', () => {
mediaRecorder.stop();
mediaRecorder.onstop = () => {
const audioBlob = new Blob(audioChunks, { type: 'audio/wav' });
uploadAudio(audioBlob);
};
});
function uploadAudio(blob) {
const formData = new FormData();
formData.append('audio', blob, 'recording.wav');
fetch('upload.php', {
method: 'POST',
body: formData
});
}
</script>
服务器端处理
创建 upload.php 文件接收并保存音频:

<?php
if (isset($_FILES['audio'])) {
$targetDir = "uploads/";
$targetFile = $targetDir . basename($_FILES["audio"]["name"]);
if (move_uploaded_file($_FILES["audio"]["tmp_name"], $targetFile)) {
echo "录音已保存";
} else {
echo "保存失败";
}
}
?>
音频格式处理
默认录制的可能是 WebM 格式,如需 WAV 格式:
// 修改 MediaRecorder 初始化
mediaRecorder = new MediaRecorder(stream, { mimeType: 'audio/wav' });
安全注意事项
确保上传目录有正确权限:

chmod("uploads/", 0755);
验证文件类型:
$allowedTypes = ['audio/wav', 'audio/webm'];
if (!in_array($_FILES['audio']['type'], $allowedTypes)) {
die("无效的音频格式");
}
扩展功能
添加录音时长限制:
// 设置60秒自动停止
setTimeout(() => {
if (mediaRecorder.state === 'recording') {
mediaRecorder.stop();
}
}, 60000);
显示录音波形可以使用 Web Audio API 或第三方库如 Wavesurfer.js。






