获取文件的mime类型的最佳方法是什么?在给出任何答案之前,这里列出了一些需要考虑的事情。
- 不能依赖于上传表单的准确性
- Fileinfo在5.3中不准确,测试
- mime_content_type在FileInfo 测试中是不准确的
- 这不仅仅是图像类型,所以getImageSize()不是一个可行的选项。
这也可以是apache/server/pear的东西,而不仅仅依赖于php函数?
遗憾的是,在任何编程语言中都没有完美的方法来做到这一点。
获取minetype的两个最标准的方法是
- 从文件扩展名确定…所以something.jpg是jpeg文件,something.doc是word文件。
- 从文件中的魔法字符串确定…所以如果文件的前两个字节是0xFF 0xD8,它就是一个jpeg文件。办公文档以0xD0 0xCF 0x11 0xE0开头。
两种方式各有利弊。
我可以上传一个exe文件,但它的扩展名为"。jpg",以击败第一种方式或确定mime类型。
对于这两种类型,我基本上需要一个大的数据库来搜索,这样我就可以知道文件属于什么mime类型。
但是,如果您只对确定少数类型文件的mime类型感兴趣。(可能只是jpg, png, gif等),那么最好的方法(恕我而言)将是方法2。只需保存所有魔术字符串的数据库或数组,并根据它测试文件。
很容易得到神奇的字符串,只需谷歌。