Неверный / нежелательный MIME-тип ogv из PHP fileinfo

Я пробовал это на большинстве серверов, которые у меня есть, и PHP, кажется, возвращает application/ogg для ogv видео файлов. Это странно, потому что конфигурационный файл Apache MIME четко перечисляет video/ogg (также не желательно, но по крайней мере это имело бы смысл, поскольку информация должна поступать оттуда). Первоначально я столкнулся с этой проблемой в Responsive File Manager, но смог воспроизвести ее самостоятельно.

Код:

$fileinfo = finfo_open(FILEINFO_MIME);
$mime_type = finfo_file($fileinfo, $file);
finfo_close($fileinfo);

var_dump($mime_type);

Выход:

string(31) "application/ogg; charset=binary"

Откуда поступает эта информация и как я могу ее изменить?

Ввод директив.htaccess, похоже, совсем не помогает. Возможно, также имеет значение, что я использую cPanel/WHM, но не смог найти никакой дополнительной соответствующей конфигурации. Кроме того, cPanel также дает video/ogg для огв, как и Apache.

1 ответ

finfo_file использует Linux file команда: https://linux.die.net/man/1/file

Выход из finfo_file:

application/ogg; charset=binary

Выход из file -i sample.ogv

application/ogg; charset=binary

Одним из решений является использование apache_lookup_uri Похоже, это может работать для вас, так как вы работаете на Apache: http://php.net/apache_lookup_uri

var_dump( apache_lookup_uri('sample.ogv') );

object(stdClass)#1 (16) {
  ["status"]=>
  int(200)
  ["the_request"]=>
  string(27) "GET /tmp/test.php HTTP/1.1"
  ["method"]=>
  string(3) "GET"
  ["mtime"]=>
  int(0)
  ["clength"]=>
  int(0)
  ["chunked"]=>
  int(0)
  ["content_type"]=>
  string(9) "video/ogg"
  ["no_cache"]=>
  int(0)
  ["no_local_copy"]=>
  int(1)
  ["unparsed_uri"]=>
  string(16) "/mime/sample.ogv"
  ["uri"]=>
  string(16) "/mime/sample.ogv"
  ["filename"]=>
  string(48) "/tmp/sample.ogv"
  ["allowed"]=>
  int(0)
  ["sent_bodyct"]=>
  int(0)
  ["bytes_sent"]=>
  int(0)
  ["request_time"]=>
  int(1504107700)
}
Другие вопросы по тегам