【问题标题】:Read part of a file in PHP在 PHP 中读取文件的一部分
【发布时间】:2011-01-29 12:05:28
【问题描述】:

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

【问题讨论】:

    标签: php file mp3


    【解决方案1】:

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

    当然,总是有两首歌曲使用不同的比特率、采样率,甚至不同的 CD 翻录器和编码器进行编码的情况。所有人都会产生完全不同的文件,但仍然是“同一首歌”。

    【讨论】:

      【解决方案2】:

      试试fseek。这会将指针移动到文件末尾之前约 1024 KB。

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-04-04
          • 1970-01-01
          • 1970-01-01
          • 2015-05-17
          • 2012-05-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多