用PHP读取文件的一部分

时间:2010-03-19 14:40:51

标签: php file mp3

我想读取最后1兆字节的MP3文件,并为该文件的那一部分计算SHA1校验和。我想要这个的原因是,当我正在寻找重复的MP3时,标题信息(歌曲标题,专辑等)可能会有所不同,即使它是exakt相同的音频文件,所以我想我会更好的校验和文件的一部分而不是整个文件。有没有一种有效的方法呢?

3 个答案:

答案 0 :(得分:6)

MP3没有歌曲/专辑/艺术家的固有“标题”信息。这由ID3处理,ID3可以位于文件的前面(ID3v2,随机大小,取决于指定的信息量)或最后(ID3v1,固定128字节)。要通过校验和正确识别MP3,您必须确保忽略ID3标签的两个版本。此外,可以在.wav容器中嵌入MP3,在这种情况下有.wav标题和诸如此类的。

当然,总有两种歌曲以不同的比特率,采样率,甚至不同的CD片段和编码器编码的情况。所有这些都会产生完全不同的文件,但仍然是“同一首歌”。

答案 1 :(得分:5)

您必须使用c包装器进行文件操作:fopenfseekfread

$size = 1024 * 1000;
$handle = fopen($file, 'r');
fseek($handle, -$size);
$limitedContent = fread($handle, $size);
$hash = md5($limitedContent);

答案 2 :(得分:3)

试试fseek。这将在文件结束之前将指针移动到~1024千字节。

 fseek($fp, -1024 * 1024, SEEK_END);