Это раздражает, я не могу получить правильный тип MIME для многих различных файлов, используя php finfo ().
Вот моя маленькая тестовая программа:
<? $finfo = new finfo(FILEINFO_MIME);
echo $finfo->file('/mnt/partage/Film/Sintel.2010.1080p.mkv');
Его вывод совершенно неверен:
application/octet-stream; charset=binary
Вот file -bi /mnt/partage/Film/Sintel.2010.1080p.mkv
выход:
video/x-matroska; charset=binary
Видимо php finfo () не использует правильный магический файл. Однако вариантов не так много: либо /usr/share/file/magic
или же /etc/magic.mime
Ни один из них не работает с php.
Я запускаю это в стабильной Debian (wheezy) с backports libmagic. Проблема возникает как при вызове программы из Apache, так и из командной строки.
Fileinfo использует данные это скомпилировано с PHP. Он не использует libmagic, поэтому изменение вашего libmagic не влияет на PHP. Единственный вариант — использовать более новую версию PHP или скомпилировать ее самостоятельно с новым файлом данных.
Изменить: или передать $magic_file
параметр для finfo_open, или установить MAGIC
переменная окружения.
MIME-типы не похожи на разные ОС. Боюсь, вы не можете просто полагаться на типы MIME. Я бы предложил сделать проверку на расширение или добавить все возможные типы MIME для типа файла. У меня была такая же проблема несколько недель назад, и я должен был полагаться на расширение файла.
Вы можете попробовать с:
$info = pathinfo($file);
echo $info['extension']; //Will be mkv in your case