我也遇到过类似的问题。我的 PHP 5.4.7 上的FileInfo(在 Windows 下的 XAMPP 中)能够将.flv 文件检测为video/x-flv,但在.mkv 视频上失败(应该将其检测为video/x-matroska,但返回application/octet-stream而是)和许多其他非典型的多媒体格式。
为了解决这个问题,我完全放弃了 FileInfo 并恢复到旧的、好的 mime-by-extension 方法,使用以下函数:
public static function getMimeTypeByExtension($file)
{
$extensions = require('mimeTypes.php');
if(($ext=pathinfo($file, PATHINFO_EXTENSION))!=='')
{
$ext=strtolower($ext);
if(isset($extensions[$ext]))
return $extensions[$ext];
}
return null;
}
您可以在pastebin.com 找到mimeTypes.php 的内容。它是由我通过合并来自 Yii 框架的 Apache SVN's mime.types file 和类似的 mimeTypes.php 数组来编译的。结果集在文件扩展名和对应的 MIME 类型之间有 1000 多个关系。
重要提示:在使用此解决方案之前,您必须仔细考虑,您需要它的目的是什么?基于文件扩展名的 MIME 类型很容易被欺骗,只需更改该扩展名即可。因此,任何与安全相关的代码都应尽可能远离我的解决方案。
我需要它只是为了为flowplayer 提供正确的 MIME 类型的视频文件。我假设,如果用户将此类文件的扩展名更改为其他内容,那么 flowplayer 将无法播放该电影。