当我查找 my 的 mime 类型时,其中.flv
将它们声明为:application/octet-stream。f4v
php
我一直认为这些文件的 mime 类型是“video/x-flv”和“video/x-f4v”。这是一个新事物还是来自一个时髦的来源或什么的文件?
当我查找 my 的 mime 类型时,其中.flv
将它们声明为:application/octet-stream。f4v
php
我一直认为这些文件的 mime 类型是“video/x-flv”和“video/x-f4v”。这是一个新事物还是来自一个时髦的来源或什么的文件?
我在这个答案中提到Winista 和 URLMon 都不能正确检测到 swf 或 flv。这就是您使用的 php 组件无法完全识别“video/x-flv”和“video/x-f4v”文件的原因。
Winista 使用一个魔法文件(包含 MIME 类型列表和指示特定文件起始位的相应十六进制字符)。
我建议您关注为什么没有其他人能够将 flv 检测添加到这个魔术文件中。winista 项目是一个旧的 Java 开源项目的移植。
我唯一的另一个想法是尝试 ffmpeg,也许它有能力检测这些 flv 和 f4v 文件的确切 MIME 类型。
我有一个类似的问题。我的 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;
}
mimeTypes.php
您可以在pastebin.com找到内容。它是由我通过合并Apache SVN 的mime.types
文件mimeTypes.php
和来自 Yii 框架的类似数组来编译的。结果集在文件扩展名和对应的 MIME 类型之间有超过 1000 个关系。
重要提示:在使用此解决方案之前,您必须仔细考虑,您需要它的目的是什么?基于文件扩展名的 MIME 类型很容易被欺骗,只需更改该扩展名即可。因此,任何与安全相关的代码都应尽可能远离我的解决方案。
我需要它只是为了为flowplayer提供正确的 MIME 类型的视频文件。我假设,如果用户将此类文件的扩展名更改为其他内容,则 flowplayer 将无法播放该电影。