从我第一眼看到mime类型开始,就觉得这货是一个完全没用的东西,今天的学习经历更让我加深了这一观点。

《php和mysql web开发》书上有一个文件上传的实例,作者特别提到要对用户上传的文件的大小、类型等等做检查,其中在检查类型时用到了mime。我一直在想,mime和后缀名相比,除了需要多输好多字母外还有什么作用。莫非mime能无视后缀名,直接获知文件类型?如果是这样的话,那它就有用了,可以防止恶意用户通过改后缀名来上传非法文件。

于是我做了个实验,先写个小程序,如果上传的文件为text/plain,则打印出内容来。然后我新建了一个txt文件,随便输了几个字母进行上传。结果很明显,内容被打印了出来。于是我修改文件后缀名为doc,再次上传,结果就悲剧了,程序真心以为这是一个doc文件,没有打印出来。那反过来的话,我如果新建一个doc文件,输入内容后,将其后缀改为txt,则该文件会被认为是txt文件而被打印出来。

于是我的结论就是mime类型就是一完全吃多了没事干弄出来的坑爹货,既然无法真正识别文件类型,比较后缀名和mime有什么区别呢?唯一的区别就是比较mime需要多打好些字母。