mime_content_type bazı mp3s application / octet-stream dönmek neden

2 Cevap php

neden bazı MP3 dosya üzerinde i ($ mp3_file_path) bu dönüş application / octet-stream mime_content_type çağırdığınızda?

i bu var:

if (!empty($_FILES)) {
    $tempFile = $_FILES['Filedata']['tmp_name'];
    $image = getimagesize($tempFile);
    $mp3_mimes = array('audio/mpeg', 'audio/x-mpeg', 'audio/mp3', 'audio/x-mp3', 'audio/mpeg3', 'audio/x-mpeg3', 'audio/mpg', 'audio/x-mpg', 'audio/x-mpegaudio'); 

    if (in_array(mime_content_type($tempFile), $mp3_mimes)) { 
        echo json_encode("mp3");
    } elseif ($image['mime']=='image/jpeg') {
        echo json_encode("jpg");
    } else{
        echo json_encode("error");
    }
}

EDIT: i found a nice class here:

http://www.zedwood.com/article/127/php-calculate-duration-of-mp3

2 Cevap

Onları tanımlamaya gelince MP3 dosyaları garip bir canavar vardır. Sen bir. Wav konteyner ile saklanan bir MP3 olabilir. Dosyanın başlangıcına bir başlık ID3v2 olabilir. Siz herhangi bir dosya içinde aslında bir MP3 gömebilirsiniz.

Güvenilir bunları algılamak için tek yol dosyası aracılığıyla yavaş yavaş ayrıştırmak ve bir MP3 çerçevesi gibi görünüyor şey bulmak için çalışmaktır. Bir çerçeve olası geçerli MP3 dosyalarının küçük birimidir, ve ses 0.028 saniyede (bellek gidiyor) temsil eder. Çerçevenin boyutu bitrate ve örnekleme hızına bağlı olarak değişir, bu yüzden sadece ilk çerçevenin bit / örnek hızını yakala ve tüm diğer çerçeveler aynı boyutta olacak varsayıyorum olamaz - VBR mp3 bütünüyle ayrıştırılması gerekir toplam oyun süresi hesaplamak için.

Tüm bunlar, PHP'nin FileInfo kullanarak ve gerçek MP3 veri bir dosyaya HER başlayabilirsiniz gibi gibi, güvenilir değil tarafından bir MP3 belirlenmesi aşağı kaynar. fileinfo sadece veri ilk kilobayt veya iki bakar, bu yüzden bir MP3 değil diyor eğer veri uzak Lütfen biraz başladım, çünkü çok iyi yalan söylüyor olabilir

Bir dosyayı tanımak için başarısız olduğunda application/octet-stream mime_content_type s dönüş tipi muhtemelen.

Bu durumda MP3 ya da gerçek bir MP3 dosya veya - daha muhtemel - dosya gerçek bir MP3 dosyası, ancak PHP fonksiyon biçimini tanımak için kullandığı "sihirli bayt" içermez - farklı bir alt çünkü belki format veya değişken bitrate falan vardır.

Sen getid3 daha iyi sonuç verip deneyebilirsiniz. Ben onunla hiç çalışmamıştım ama multimedya dosyaları dışında çok sayıda bilgi almak için oldukça sağlıklı bir kütüphane gibi görünüyor.

Eğer PHP'nin erişiminiz varsa, ayrıca change the mime.magic dosyasındaki PHP uses, although I have no idea whether a better file exists that is able to detect your MP3s. (The mime.magic dosya mime_content_type belli tanımak için kullandığı tüm bayt dizileri içeren dosyadır mümkün olabilir dosya türleri.)