почему в некоторых файлах 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
использует для распознавания определенных типов файлов.)