php 实现 录音
PHP 实现录音功能
PHP 本身是服务器端语言,无法直接操作客户端硬件(如麦克风)进行录音。但可以通过结合前端技术(如JavaScript)和后端PHP实现录音功能。以下是具体实现方案:
前端使用JavaScript录音
HTML5的Web Audio API和MediaDevices接口可以访问麦克风并录音:

<input type="button" value="开始录音" onclick="startRecording()">
<input type="button" value="停止录音" onclick="stopRecording()">
<script>
let mediaRecorder;
let audioChunks = [];
async function startRecording() {
const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
mediaRecorder = new MediaRecorder(stream);
mediaRecorder.start();
mediaRecorder.ondataavailable = event => {
audioChunks.push(event.data);
};
}
function stopRecording() {
mediaRecorder.stop();
mediaRecorder.onstop = async () => {
const audioBlob = new Blob(audioChunks, { type: 'audio/wav' });
await uploadAudio(audioBlob);
};
}
async function uploadAudio(blob) {
const formData = new FormData();
formData.append('audio', blob, 'recording.wav');
await fetch('upload.php', {
method: 'POST',
body: formData
});
}
</script>
后端PHP接收音频文件
创建upload.php处理上传的音频文件:
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['audio'])) {
$uploadDir = 'uploads/';
$filename = uniqid() . '.wav';
$uploadPath = $uploadDir . $filename;
if (move_uploaded_file($_FILES['audio']['tmp_name'], $uploadPath)) {
echo json_encode(['status' => 'success', 'file' => $filename]);
} else {
echo json_encode(['status' => 'error']);
}
}
?>
服务器环境配置
确保服务器支持文件上传:

- 检查
php.ini中的配置:file_uploads = Onupload_max_filesize = 20M(根据需求调整)post_max_size = 21M(应大于upload_max_filesize)
- 创建可写目录:
mkdir uploads chmod 755 uploads
音频处理扩展(可选)
安装PHP音频处理扩展如sox或ffmpeg进行格式转换:
sudo apt-get install sox
PHP调用命令行工具转换格式:
exec("sox uploads/input.wav -r 16000 uploads/output.wav");
安全注意事项
- 验证文件类型:
$allowedTypes = ['audio/wav', 'audio/mpeg']; if (!in_array($_FILES['audio']['type'], $allowedTypes)) { die('Invalid file type'); } - 限制文件大小:
if ($_FILES['audio']['size'] > 20 * 1024 * 1024) { die('File too large'); } - 重命名文件避免路径遍历:
$filename = preg_replace('/[^a-z0-9\._-]/i', '', $_FILES['audio']['name']);
完整流程总结
- 前端使用JavaScript获取麦克风权限并录制音频
- 将录制的音频Blob通过FormData上传到PHP服务器
- PHP接收并保存音频文件到指定目录
- 可选:使用服务器端工具处理音频文件
- 实现严格的文件类型和大小验证确保安全
这种方法适用于需要浏览器端录音并上传到服务器的场景,如语音留言、在线访谈等应用。






