当前位置:首页 > PHP

php 实现 录音

2026-02-28 06:33:29PHP

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:

php 实现 录音

<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>

以上方案实现了完整的录音功能流程,从前端采集到后端存储。根据实际需求可以调整音频格式、增加权限验证等扩展功能。

标签: php
分享给朋友:

相关文章

php实现文件上传

php实现文件上传

PHP 文件上传实现方法 在 PHP 中实现文件上传需要处理 HTML 表单和服务器端脚本。以下是详细步骤: 创建 HTML 表单 使用 enctype="multipart/form-data"…

php实现文件下载

php实现文件下载

PHP实现文件下载的方法 通过PHP实现文件下载功能,可以采用多种方式,以下是几种常见的实现方法: 使用header()函数强制下载 设置HTTP头信息,强制浏览器下载文件而非直接打开: $fi…

php实现队列

php实现队列

PHP实现队列的方法 队列是一种先进先出(FIFO)的数据结构,PHP可以通过多种方式实现队列功能。 使用数组模拟队列 PHP数组可以模拟队列的基本操作,通过array_push和array_shi…

php实现上传

php实现上传

PHP 文件上传实现 HTML 表单设置 创建一个包含文件上传字段的 HTML 表单,确保表单的 enctype 属性设置为 multipart/form-data,这是文件上传必需的设置。 <…

php 线程实现

php 线程实现

PHP 线程实现方法 PHP 本身是单线程语言,但可以通过扩展或库实现多线程功能。以下是几种常见的实现方式: 使用 pthreads 扩展 pthreads 是一个 PHP 扩展,允许在 PHP 中…

php实现文章

php实现文章

PHP实现文章管理功能 在PHP中实现文章管理功能通常涉及数据库操作、表单处理和页面展示。以下是实现文章管理的基本步骤: 数据库设计 创建articles表,包含字段如id、title、conten…