当前位置:首页 > 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:

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

php实现验证码

php实现验证码

PHP实现验证码的方法 使用GD库生成验证码 GD库是PHP中处理图像的扩展,可用于生成验证码图片。 <?php session_start(); $width = 120; $height…

php实现分类

php实现分类

PHP实现分类的方法 数据库设计 创建分类表时,通常需要包含id、名称、父级id等字段。父级id用于实现多级分类结构。 CREATE TABLE categories ( id INT A…

php实现接口

php实现接口

PHP 实现接口的方法 在 PHP 中,接口(Interface)用于定义一组方法的规范,而不实现具体功能。类可以实现一个或多个接口,并必须实现接口中定义的所有方法。 定义接口 接口使用 inte…

php实现上传图片

php实现上传图片

上传图片的基本流程 PHP 实现图片上传功能需要处理文件接收、验证、保存等步骤。以下是具体实现方法。 创建 HTML 表单 在 HTML 中创建一个表单,设置 enctype="multipart…

php怎么实现登录功能

php怎么实现登录功能

数据库准备 创建用户表存储登录信息,通常包括用户名、密码(需加密)等字段。示例SQL: CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY…