PHP 5.3.5 fileinfo()MS Office 2007文件的MIME类型 - magic.mime更新?

时间:2011-01-26 16:26:28

标签: php mime-types detection

在PHP上传时,我正在尝试验证正在上传的文件的MIME类型,以匹配应用程序的一组有效MIME类型。尝试使用fileinfo()来确定Office 2007文件的MIME类型时,它不会检测为适当的MIME类型。相反,MIME类型响应是“application / zip”

Office文档MIME类型: http://filext.com/faq/office_mime_types.php

示例PHP代码:

  

$ oFileInfo = new finfo(FILEINFO_MIME_TYPE);

     

$ sMimeType = $ oFileInfo - > file($ _FILES ['Filedata'] ['tmp_name']);

     

echo $ sMimeType;

服务器设置信息:

  • 操作系统:Windows Server 2003 32位
  • 网络服务器:IIS 6.0
  • PHP:5.3.5(线程安全)使用FastCGI 1.5
  • 文件:magic.mime
    • darko at uvcms dot com 16-Apr-2008 09:35
      • 链接:php.net/manual/en/fileinfo.installation.php
    • 大小:517 KB
    • 来源:Source Forge:GNU32 - FileType gnuwin32.sourceforge.net/packages/filetype.htm

我发现很多帖子都是从网络服务器下载时引用较新Office格式的问题。在所有这些示例中,我没有找到任何说明将新MIME类型添加到现有magic.mime文件的庄园,或者已经包含Microsoft Office 2007+ MIME类型的magic.mime文件的链接。谢谢你的帮助。

4 个答案:

答案 0 :(得分:1)

较新的Office文件实际上是ZIP存档。这就是MIME Magic数据库将它们检测为ZIP文件的原因。您可能需要根据文件扩展名添加特殊规则,或查看ZIP文件以查看它是否具有docProps文件夹(Office ZIP存档具有包含有关文档的元数据的文件夹)。

其他文件格式实际上是具有不同扩展名的ZIP存档,例如JAR文件。

答案 1 :(得分:1)

  
      
  1. 是的,你应该更新magic.mime。
  2.   
大声笑,是的,只是更新它,问题解决了。 不幸的是,看起来神奇的mime类型系统看起来像查看实际的文件内容,并且因为文件被压缩,它无法解压缩(并查看哪个文件?)

有人建议编写一个函数来解压缩压缩文件,然后检查是否存在“DocProps”目录。但这会向生产服务器引入另一种攻击方式。

答案 2 :(得分:0)

  1. 是的,您应该更新magic.mime
  2. 赞不上相信从浏览器发送的mime类型($_FILES['Filedata']['type']
  3. 为什么你使用手册说它被弃用的功能? http://php.net/manual/en/function.mime-content-type.php
  4. 注意: finfo()通过它的魔术字节确定文件的MIME类型;鉴于Office 2007文件(以及许多其他文件格式,例如ePUB)只是具有指定目录结构的zip包,因此让finfo()返回application/zip是合理的。

    我建议解压缩或列出内容以检查其结构,如果你真的想根据它的内容确定文件类型(而不是上传时MIME类型浏览器报告)

答案 3 :(得分:0)

您是否尝试将新的mime类型添加到IIS?

  1. 访问“Internet管理”管理单元
  2. 右键单击“网站”并选择“属性”
  3. 选择“HTTP标头”
  4. 选择“Mime Types”
  5. 输入一个没有前导期和适当的mime类型的新扩展名。根据需要重复每个扩展。
  6. 点击“确定”关闭所有对话框