Добавить знания типа MIME в PHP - PullRequest
3 голосов
/ 22 марта 2019

Мне известна команда UNIX file для определения типа MIME файла, который я могу выполнить через PHP (например, здесь ):

$content_type = exec("file -bi " . escapeshellarg($filepath));

И яТакже известно о

$fi = new finfo();
echo $fi->file($filename, FILEINFO_MIME_TYPE) . PHP_EOL;

и

echo mime_content_type($filename) . PHP_EOL;

Оба встроенных решения PHP выдают одинаковый вывод.Однако команда Linux file знает некоторые форматы больше.

Аудиофайлы AMR были зарегистрированы как application/octet-stream всеми тремя методами.Затем я добавил файл magic в базу данных команды file:

$ cat /etc/magic
0   string  #!AMR\n Adaptive Multi-Rate Audio Codec
!:mime  audio/amr

$ file -bi test115.amr 
audio/amr; charset=binary

Однако PHP по-прежнему сообщает application/octet-stream.

Я думал, что PHP-встроен и fileиспользовать одну и ту же базу данных как-нибудь.Как я могу научить PHP знать MIME-тип файла AMR?

1 Ответ

1 голос
/ 22 марта 2019

PHP, похоже, использует свою собственную, связанную базу данных для поиска в fileinfo;Вы можете изменить это поведение, добавив второй параметр к вызову new finfo или установив MAGIC env var.

Из документов:

Примечание. ОбычноИспользование связанной магической базы данных (оставив неустановленными переменные magic_file и переменные среды MAGIC) - лучший способ действий, если вам не нужна специальная магическая база данных.

http://php.net/manual/en/function.finfo-open.php

...