PHP bir dosya parçasını okuyun

3 Cevap php

Ben bir MP3 dosyasının son 1 megabayt okuma ve dosyanın sadece bir kısmı için SHA1 checksum hesaplamak istiyorum. Ben bu isteyeyim nedeni yinelenen MP3 aradığım zaman, başlık bilgi (şarkı adı, albüm vs) exakt aynı ses dosyası olsa bile farklı olabilir, bu yüzden ben denetseltoplamın daha iyi olacağını düşündüm olduğunu yerine tüm birinin sonunda dosyasının bir parçası. Bunu yapmanın etkili bir yolu var mı?

3 Cevap

Bu dosya manipülasyon için c sarmalayıcıları kullanmak gerekiyor: fopen, fseek ve fread:

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

MP3 şarkı / albüm / sanatçının hiçbir içsel "başlık" bilgisi yok. Yani ya da sonunda (128 byte sabit ID3v1) de (çok bilgi belirtilmiş nasıl bağlı, ID3v2, rastgele boyut) dosyasının ön olabilir ki, ID3 tarafından işlenir oldu. Düzgün Checksumming tarafından MP3 belirlemek için, ID3 etiketi iki sürümü göz ardı emin olurdu. Ayrıca, orada bu durumda bir. Wav kap,. Wav başlıkları ve etajer gömülü MP3 olması mümkündür.

Ve tabii ki, farklı bit, örnekleme oranları, ve hatta farklı CD Rippers ve encoder ile kodlanan iki şarkı olan durum her zaman var. Tüm bambaşka dosyaları üretmek, ama yine de "aynı şarkı" olan olacaktır.