在PHP上传时,我试图验证正在上载的文件的MIME类型,以匹配应用程序的一组有效MIME类型。当试图使用fileinfo()来确定Office 2007文件的MIME类型时,它不会检测到它们的适当MIME类型。相反,MIME类型的响应是"application/zip“
Office文档MIME类型: types.php
示例PHP代码:
$oFileInfo =新的finfo( FILEINFO_MIME_TYPE ); $sMimeType = $oFileInfo ->文件($_->‘’Filedata‘); 回声$sMimeType;
服务器安装信息:
- Size: 517 KB
- Source: Source Forge: GNU32 - FileType gnuwin32.sourceforge.net/packages/filetype.htm我已经找到了许多文章,这些文章提到了在从when服务器下载时使用更新的Office格式的问题。在所有这些示例中,我没有发现任何地方可以说明将新的MIME类型添加到现有的magic.mime文件,或者指向已经包含Microsoft类型的magic.mime文件的链接。谢谢你的帮助。
发布于 2011-01-26 17:49:57
较新的Office文件实际上是ZIP档案。这就是为什么MIME魔术数据库将它们检测为ZIP文件的原因。您可能需要根据文件扩展名添加特殊规则,或者查看ZIP文件是否有docProps文件夹(Office档案中有这样一个文件夹,其中包含有关文档的元数据)。
还有其他文件格式,实际上是具有不同扩展名的ZIP档案,例如JAR文件。
发布于 2011-05-26 20:08:06
哈哈,是的,更新一下,问题解决了。不幸的是,看起来神奇的mime类型系统不需要查看实际的文件内容,而且由于文件是压缩的,所以无法解压缩(查看哪个文件?)
例如,有人建议编写一个函数来解压缩文件,然后检查是否存在"DocProps“目录。但这将给生产服务器带来另一个攻击矢量。
发布于 2011-01-26 16:38:09
magic.mime。$_FILES['Filedata']['type'])注意: finfo()根据文件的神奇字节来确定文件的MIME类型;鉴于Office2007文件(以及许多其他文件格式,例如ePUB)只是简单地压缩具有指定目录结构的包,所以让finfo()返回application/zip是合理的。
我建议解压缩或列出内容来检查它的结构,如果您真的想根据文件的内容(而不是上传时的MIME类型浏览器报告)来确定文件类型的话。
https://stackoverflow.com/questions/4807036
复制相似问题