php 实现 录音
PHP 实现录音功能的方法
PHP 本身是服务器端语言,无法直接录音。但可以通过结合前端技术和后端处理实现录音功能。以下是具体实现方案:
前端录音实现
使用 Web Audio API 和 MediaRecorder API 实现浏览器端录音:
<button id="start">开始录音</button>
<button id="stop" disabled>停止录音</button>
<audio id="audio" controls></audio>
<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.onstop = () => {
const audioBlob = new Blob(audioChunks, { type: 'audio/wav' });
const audioUrl = URL.createObjectURL(audioBlob);
document.getElementById('audio').src = audioUrl;
// 上传到服务器
uploadAudio(audioBlob);
};
mediaRecorder.start();
document.getElementById('start').disabled = true;
document.getElementById('stop').disabled = false;
});
document.getElementById('stop').addEventListener('click', () => {
mediaRecorder.stop();
document.getElementById('start').disabled = false;
document.getElementById('stop').disabled = true;
});
function uploadAudio(blob) {
const formData = new FormData();
formData.append('audio', blob, 'recording.wav');
fetch('upload.php', {
method: 'POST',
body: formData
}).then(response => {
console.log('上传成功');
});
}
</script>
PHP 后端处理
创建 upload.php 文件接收并保存音频:
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['audio'])) {
$uploadDir = 'uploads/';
if (!file_exists($uploadDir)) {
mkdir($uploadDir, 0777, true);
}
$filename = uniqid() . '.wav';
$destination = $uploadDir . $filename;
if (move_uploaded_file($_FILES['audio']['tmp_name'], $destination)) {
echo json_encode(['status' => 'success', 'file' => $filename]);
} else {
echo json_encode(['status' => 'error']);
}
}
?>
音频格式转换
如需转换音频格式,可使用 FFmpeg:
$inputFile = 'uploads/recording.wav';
$outputFile = 'uploads/recording.mp3';
exec("ffmpeg -i $inputFile $outputFile");
安全性考虑
确保上传目录不可直接执行:
- 设置目录权限为 755
- 在 uploads 目录中放置 .htaccess 文件:
Deny from all <FilesMatch "\.(mp3|wav|ogg)$"> Allow from all </FilesMatch>
移动端兼容方案
对于移动设备,建议使用第三方库如 RecordRTC:
<script src="https://cdnjs.cloudflare.com/ajax/libs/RecordRTC/5.6.2/RecordRTC.min.js"></script>
<script>
let recorder;
document.getElementById('start').addEventListener('click', async () => {
const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
recorder = RecordRTC(stream, {
type: 'audio',
mimeType: 'audio/wav'
});
recorder.startRecording();
});
</script>
以上方案实现了完整的录音功能流程,从前端采集到后端存储。根据实际需求可以调整音频格式、增加权限验证等扩展功能。







