【问题标题】:.flv and .f4v file extensions displaying unexpected mime type.flv 和 .f4v 文件扩展名显示意外的 mime 类型
【发布时间】:2012-12-08 14:41:02
【问题描述】:

当我在php 中查找.flvf4v 的mime 类型时,它会将它们声明为:application/octet-stream。

我一直认为这些文件的 mime 类型是“video/x-flv”和“video/x-f4v”。这是新事物还是文件来自时髦的来源或其他什么?

【问题讨论】:

  • 在 PHP 中?愿意分享该代码吗?检测 MIME 类型通常不可靠,例如我使用winista and if that fails I resort back URLMon。听起来您使用的代码默认返回八位字节流...
  • 谢谢你的链接,我去看看。

标签: php mime-types flv


【解决方案1】:

我在this answer 中提到Winista 和URLMon 都不能正确检测到swf 或flv。这就是为什么您使用的 php 组件无法完全识别 'video/x-flv' 和 'video/x-f4v' 文件的原因。

Winista 使用 ma​​gic 文件(包含 MIME 类型列表和指示特定文件起始位的相应十六进制字符)。

我建议您关注为什么没有其他人能够将 flv 检测添加到此魔术文件中。 winista 项目是一个旧 Java 开源项目的移植。

我唯一的想法是尝试 ffmpeg,也许它有能力检测这些 flv 和 f4v 文件的确切 MIME 类型。

【讨论】:

    【解决方案2】:

    我也遇到过类似的问题。我的 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 将无法播放该电影。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-09
      • 2023-03-22
      • 2015-09-23
      • 2010-10-03
      • 2011-05-14
      • 1970-01-01
      • 2010-11-05
      相关资源
      最近更新 更多