mime types — Где PHP finfo () получает информацию о своем файле? Это не соответствует & quot; файлу -i & quot; выход

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

2

Решение

Fileinfo использует данные это скомпилировано с PHP. Он не использует libmagic, поэтому изменение вашего libmagic не влияет на PHP. Единственный вариант — использовать более новую версию PHP или скомпилировать ее самостоятельно с новым файлом данных.

Изменить: или передать $magic_file параметр для finfo_open, или установить MAGIC переменная окружения.

2

Другие решения

MIME-типы не похожи на разные ОС. Боюсь, вы не можете просто полагаться на типы MIME. Я бы предложил сделать проверку на расширение или добавить все возможные типы MIME для типа файла. У меня была такая же проблема несколько недель назад, и я должен был полагаться на расширение файла.

Вы можете попробовать с:

$info = pathinfo($file);

echo $info['extension']; //Will be mkv in your case
0

По вопросам рекламы [email protected]