почему некоторые mp3s на mime_content_type возвращают приложение / октет-поток

почему в некоторых файлах mp3, когда я вызываю mime_content_type ($ mp3_file_path), это приложение return / octet-stream?

у меня есть это:

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: я нашел хороший класс здесь:

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

MP3-файлы – это странный зверь, когда дело доходит до их идентификации. Вы можете хранить MP3 с контейнером .wav. В начале файла может быть заголовок ID3v2. Вы можете вставлять MP3 по существу в любой файл.

Единственный способ их надежного обнаружения – медленно проработать файл и попытаться найти что-то похожее на фрейм MP3. Кадр представляет собой наименьшую единицу допустимых данных MP3 и представляет (отключение памяти) 0,028 секунды аудио. Размер рамки зависит от скорости передачи битрейта и частоты дискретизации, поэтому вы не можете просто захватить скорость битрейта / сэмпла первого кадра и считать, что все остальные кадры будут того же размера – VBR mp3 должен быть разобран полностью для вычисления общего игрового времени.

Все это сводится к тому, что идентификация MP3 с использованием PHP-файла и т. П. Ненадежна, так как фактические данные MP3 могут запускаться в любом месте в файле. fileinfo рассматривает только первые килобайты или две данные, поэтому, если он говорит, что это не MP3, это может быть очень хорошо, потому что данные начали немного дальше.

application/octet-stream , вероятно, является mime_content_type s, когда он не может распознать файл.

MP3 в этом случае либо не является реальным файлом MP3, либо, скорее, файл является настоящим файлом MP3, но не содержит «магических байтов», используемых функцией PHP для распознавания формата – возможно, потому, что это другой суб-файл -формат или имеет переменный битрейт или что-то еще.

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

Если у вас есть доступ к настройке PHP, вы также можете изменить файл mime.magic который использует PHP, хотя я не знаю, существует ли лучший файл, способный обнаруживать ваши MP3-файлы. (Файл mime.magic – это файл, содержащий все последовательности байтов, которые mime_content_type использует для распознавания определенных типов файлов.)