在PHP中获取文件mime类型的最佳方法


Best way to get a files mime typein PHP

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

  1. 不能依赖于上传表单的准确性
  2. Fileinfo在5.3中不准确,测试
  3. mime_content_type在FileInfo
  4. 测试中是不准确的
  5. 这不仅仅是图像类型,所以getImageSize()不是一个可行的选项。

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

遗憾的是,在任何编程语言中都没有完美的方法来做到这一点。

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

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

两种方式各有利弊。

我可以上传一个exe文件,但它的扩展名为"。jpg",以击败第一种方式或确定mime类型。

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

但是,如果您只对确定少数类型文件的mime类型感兴趣。(可能只是jpg, png, gif等),那么最好的方法(恕我而言)将是方法2。只需保存所有魔术字符串的数据库或数组,并根据它测试文件。

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