【问题标题】:Best way to get a files mime typein PHP在 PHP 中获取文件 mime 类型的最佳方法
【发布时间】:2011-11-22 01:34:13
【问题描述】:

获取文件的 mime 类型的最佳方法是什么?在给出任何答案之前,这里列出了一些需要考虑的事项。

  1. 不能依靠上传表单来保证准确性
  2. 经过测试,5.3 中的文件信息不准确
  3. mime_content_type 与 FileInfo 等测试不准确
  4. 这不仅仅是图像类型,因此 getImageSize() 不是一个可行的选择。

这也可以是 apache/server/pear 的东西,而不仅仅是依赖 php 函数吗?

【问题讨论】:

  • 您能描述 mime_content_type/fileinfo 的不准确之处吗? (即你怎么觉得它不准确;它不能识别特定的类型,或者只是没有你想要的全面的列表?)
  • 您也可以使用exec("file -i .."),但它使用与 Fileinfo 和 mime_content_type 相同的 mime.magic 列表。所以要看你遇到什么样的问题了。
  • 我描述的不准确,就像我上传了一个 PDF 并且它返回为应用程序/未知。
  • @Devin:然后更新你的“魔法”表。我的服务器上的 fileinfo 可以毫无问题地报告我向他们抛出的每个 PDF 的“应用程序/pdf”。

标签: php file-upload mime-types php-5.3


【解决方案1】:

遗憾的是,在任何编程语言中都没有完美的方法。

获取 minetype 的两种最标准的方法是

  1. 从文件扩展名确定...所以 something.jpg 是 jpeg 文件,something.doc 是 word 文档。
  2. 从文件中的魔术字符串判断...所以如果文件的前2个字节是0xFF 0xD8,那么它就是一个jpeg文件。一个office文档以0xD0 0xCF 0x11 0xE0开头。

两种方式各有利弊。

我可以上传一个 exe 文件,但要以“.jpg”为扩展名来命名,以击败第一种方式或确定 mime 类型。

对于这两种类型,我基本上都需要一个大型数据库来搜索,这样我就可以知道文件属于什么 mimetype。

但是,如果您只对确定几种文件类型的 mimetype 感兴趣。 (也许只是 jpg、png、gif 等),那么最好的方法(恕我直言)是第 2 种方法。只需保留所有魔术字符串的数据库或数组,然后针对该文件测试文件。

很容易得到神奇的字符串,只需谷歌。

【讨论】:

    猜你喜欢
    • 2018-06-13
    • 2012-07-04
    • 2011-04-04
    • 2016-05-19
    • 2014-06-10
    • 2018-12-01
    • 2012-04-21
    • 2013-06-27
    相关资源
    最近更新 更多