Читать часть файла в PHP - PullRequest
       12

Читать часть файла в PHP

1 голос
/ 19 марта 2010

Я хотел бы прочитать последние 1 мегабайта файла MP3 и вычислить контрольную сумму SHA1 только для этой части файла.Причина, по которой я хотел бы этого, заключается в том, что когда я ищу дубликаты MP3, информация заголовка (название песни, альбом и т. Д.) Может отличаться, даже если это тот же самый аудиофайл, поэтому я решил, что лучше бы контрольной суммычасть файла в конце, а не вся.Есть ли эффективный способ сделать это?

Ответы [ 3 ]

6 голосов
/ 19 марта 2010

MP3 не имеют встроенной информации заголовка для песни / альбома / исполнителя.Это обрабатывается ID3, который может быть либо в начале файла (ID3v2, произвольный размер, в зависимости от того, сколько информации было указано), либо в конце (ID3v1, фиксированные 128 байтов).Чтобы правильно идентифицировать MP3 с помощью контрольной суммы, вам нужно убедиться, что обе версии тега ID3 игнорируются.Кроме того, возможно встроить MP3 в контейнер .wav, в этом случае есть заголовки .wav и еще много чего.

И, конечно, всегда есть кодирование двух песен с разными битрейтами, частотой дискретизациии даже разные CD рипперы и кодеры.Все будут создавать совершенно разные файлы, но все равно будут «одной песней».

5 голосов
/ 19 марта 2010

Для манипулирования файлами вам понадобятся оболочки c: fopen , fseek и fread :

$size = 1024 * 1000;
$handle = fopen($file, 'r');
fseek($handle, -$size);
$limitedContent = fread($handle, $size);
$hash = md5($limitedContent);
3 голосов
/ 19 марта 2010

Попробуйте fseek. Это переместит указатель на ~ 1024 кбайт до конца файла.

 fseek($fp, -1024 * 1024, SEEK_END);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...