Я попробовал это на большинстве серверов, которые у меня есть, и 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.
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)
}
Других решений пока нет …