如何在PHP中单独追加标签并拆分MP3文件标签存储?
嘿,我来帮你搞定这两个PHP处理MP3标签的问题!
问题1:如何在PHP中分别追加MP3标签?
PHP本身没有内置的完整ID3标签处理工具,所以最常用的是两种方案:使用第三方库getID3(无需额外扩展,兼容性强),或者启用PHP的ID3扩展(需要服务器支持)。下面分别给你示例:
方案一:用getID3库追加标签(推荐)
getID3是一个成熟的PHP库,能处理几乎所有音频格式的标签,步骤如下:
- 下载getID3库并解压到你的项目目录
- 引入库文件,然后初始化标签写入器
- 单独指定要追加的标签(比如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
相关产品推荐
相关产品推荐

