You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PHP中单独追加标签并拆分MP3文件标签存储?

嘿,我来帮你搞定这两个PHP处理MP3标签的问题!

问题1:如何在PHP中分别追加MP3标签?

PHP本身没有内置的完整ID3标签处理工具,所以最常用的是两种方案:使用第三方库getID3(无需额外扩展,兼容性强),或者启用PHP的ID3扩展(需要服务器支持)。下面分别给你示例:

方案一:用getID3库追加标签(推荐)

getID3是一个成熟的PHP库,能处理几乎所有音频格式的标签,步骤如下:

  1. 下载getID3库并解压到你的项目目录
  2. 引入库文件,然后初始化标签写入器
  3. 单独指定要追加的标签(比如Title、Artist、Album等),然后写入
// 引入getID3核心库和标签写入模块
require_once 'getid3/getid3.php';
require_once 'getid3/write.php';

// 初始化对象
$getID3 = new getID3();
$tagWriter = new getid3_writer();
$tagWriter->filename = 'mp3/your-target-file.mp3'; // 目标MP3文件路径
$tagWriter->tagformats = array('id3v2.3'); // 选择标签版本(id3v2.3兼容性最好)

// 准备要追加的各个独立标签
$tagData = array(
    'title'   => '你的歌曲标题',
    'artist'  => '歌手名字',
    'album'   => '专辑名称',
    'year'    => '2024',
    'comment' => '自定义备注'
);

// 执行标签写入
$tagWriter->WriteTags($tagData);

// 检查写入结果
if (!empty($tagWriter->errors)) {
    echo '标签追加失败:' . implode('<br>', $tagWriter->errors);
} else {
    echo '各个标签已成功追加!';
}

方案二:用PHP原生ID3扩展(需要服务器支持)

如果你的服务器安装了id3扩展,可以直接用原生函数操作:

// 打开MP3文件(读写模式)
$mp3File = fopen('mp3/your-target-file.mp3', 'r+');

// 单独设置各个标签
id3_set_tag($mp3File, array(
    'title'  => '新的歌曲标题',
    'artist' => '新的歌手名称',
    'album'  => '新的专辑名'
));

// 关闭文件
fclose($mp3File);
问题2:修改代码将MP3标签单独存储到变量

我先补全你提供的代码,并修改为把每个标签(比如Title、Artist)单独存入对应变量,这里依然用getID3库来保证可靠性:

// 引入getID3库
require_once 'getid3/getid3.php';

$sDir = 'mp3/';
$aFiles = array();
$rDir = opendir($sDir);

if ($rDir) {
    while ($sFile = readdir($rDir)) {
        // 跳过目录和非文件
        if ($sFile == '.' or $sFile == '..' or !is_file($sDir . $sFile)) {
            continue;
        }
        
        // 只处理MP3文件
        $fileExt = strtolower(pathinfo($sDir . $sFile, PATHINFO_EXTENSION));
        if ($fileExt !== 'mp3') {
            continue;
        }
        
        // 分析MP3文件获取标签信息
        $getID3 = new getID3();
        $fileInfo = $getID3->analyze($sDir . $sFile);
        
        // 提取单独标签到变量(用isset避免标签不存在时报错)
        $title = isset($fileInfo['tags']['id3v2']['title'][0]) ? $fileInfo['tags']['id3v2']['title'][0] : '无标题';
        $artist = isset($fileInfo['tags']['id3v2']['artist'][0]) ? $fileInfo['tags']['id3v2']['artist'][0] : '未知歌手';
        $album = isset($fileInfo['tags']['id3v2']['album'][0]) ? $fileInfo['tags']['id3v2']['album'][0] : '未知专辑';
        $year = isset($fileInfo['tags']['id3v2']['year'][0]) ? $fileInfo['tags']['id3v2']['year'][0] : '未知年份';
        
        // 可选:把文件和标签信息存入数组,方便后续批量处理
        $aFiles[] = array(
            'filename' => $sFile,
            'title'    => $title,
            'artist'   => $artist,
            'album'    => $album,
            'year'     => $year
        );
        
        // 测试输出单独标签
        echo "文件:{$sFile}<br>";
        echo "标题:{$title}<br>";
        echo "歌手:{$artist}<br><br>";
    }
    closedir($rDir);
}

代码说明:

  • 我们先过滤掉非MP3文件,避免无效处理
  • 用analyze方法获取MP3的完整信息,包括标签
  • 通过isset判断标签是否存在,防止因标签缺失导致的报错
  • 把每个标签单独赋值给$title、$artist等变量,而不是全部塞进$aTags数组

内容的提问来源于stack exchange,提问作者gurps singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:09:05