【问题标题】:Detecting MIME type in PHP在 PHP 中检测 MIME 类型
【发布时间】:2010-10-13 17:06:58
【问题描述】:

我正在寻找在 PHP 中检测文件 MIME 类型的最佳方法(可能在大多数 PHP 5.2 安装并且仍在积极开发中)。

我知道 mime_content_type() 方法和 Fileinfo 扩展名,但是 mime_content_type() 不可靠且已弃用,并且 Fileinfo 不是“标准”PHP (5.2) 安装。

我还有其他选择吗?

【问题讨论】:

    标签: php mime-types mime


    【解决方案1】:

    你看过这个 PEAR 包吗?

    http://pear.php.net/package/MIME_Type

    【讨论】:

    • 谢谢。这并不理想,因为它真正所做的只是尝试使用我已经提到的两种方法,另一种不适用于所有系统(即 Windows),然后退回到扩展检测,但它看起来是我最好的选择暂时。
    【解决方案2】:

    您可以对正在运行的网络服务器进行子请求,然后解析标头以通过这种方式获取 mime 类型。由于这很慢,因此使用 curl 仅获取标头而不是完整请求。如果您正在查看大文件,这一点很重要。

    如果您正在运行 Apache 并使用 php 作为模块,请查看 VIRTUAL 函数。与使用 curl 相比,它是一种更快的子请求方式。

    否则,您可以通过扩展名查找 mime 类型。这将使所有命名良好的文件工作。

    【讨论】:

      【解决方案3】:

      (对不起,我意识到这是几个月前在我完成的时候被问到的。哦,好吧。不妨添加这个......)

      如果它是一个 *nix 服务器,你可以使用 file 命令。

      file -bi <filepath>
      

      我猜你必须在 PHP 中使用“exec”来做到这一点?我是 PHP 新手,所以不要引用我的话,但是...

      $content_type = exec("file -bi " . escapeshellarg($filepath));
      

      我没有测试它,所以您可能需要转义路径字符串并格式化输出。

      不知道这是否比其他方法更可靠。

      【讨论】:

        【解决方案4】:

        【讨论】:

        • 它没有被弃用,尽管它显然是 incorrectly marked 之前已弃用。在 PHP 7 中仍然存在,并且没有标记为已弃用。
        猜你喜欢
        • 2013-04-17
        • 1970-01-01
        • 2016-05-20
        • 1970-01-01
        • 2013-11-09
        • 2011-10-18
        • 1970-01-01
        • 2011-12-01
        • 2011-12-14
        相关资源
        最近更新 更多