2013-04-27 121 views
4

我需要确定什么是上传的文件确定excel文件的MIME类型

当上传.xlsx文件,该代码的类型:

echo $_FILES['uploaded_file']['type']."<br>"; 
echo mime_content_type($_FILES['uploaded_file']['tmp_name']); 

回报:

application/vnd.openxmlformats-officedocument.spreadsheetml.sheet 
application/vnd.ms-excel 

据我所知(从这里PHP xls, xlsx, ppt, pptx headers),application/vnd.ms-excel不是.xlsx,但.xls文件的MIME类型。

那么,为什么要返回mime_content_type()函数application/vnd.ms-excel.xlsx文件?真相在哪里?

回答

3

mime_content_type()没有特别准确,并且有利于Fileinfo()'s mime_content_type已弃用;虽然就个人而言,我打开文件和测试明确了在可能不包括为mime_magic签名的一部分的文件中的某些数据元素的细节

+0

非常感谢'@Rikesh,tucuxi'也谢谢你 – RIKI 2013-04-27 12:33:43

1

正如你可以在mime_content_type功能页面中看到警告是过时现在&它被finfo函数取代。

$finfo = new finfo(); 
$fileinfo = $finfo->file($file, FILEINFO_MIME); 

要安装finfo扩展名。

pecl install fileinfo 
6

使用FileInfo代替mime_content_type(这是deprecated)。

关于MIME类型和扩展,

application/vnd.ms-excel           xls xlb xlt 
application/vnd.ms-excel.addin.macroEnabled.12     xlam 
application/vnd.ms-excel.sheet.binary.macroEnabled.12    xlsb 
application/vnd.ms-excel.sheet.macroEnabled.12     xlsm 
application/vnd.ms-excel.template.macroEnabled.12     xltm 
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet xlsx 

(可在你的Linux Web服务器/etc/mime.types)

2

下面是一个包装,将正确识别的Microsoft Office 2007个文档。这是微不足道的,并直接使用,编辑,并添加更多的文件扩展/ MIME类型。

function get_mimetype($filepath) { 
    if(!preg_match('/\.[^\/\\\\]+$/',$filepath)) { 
     return finfo_file(finfo_open(FILEINFO_MIME_TYPE), $filepath); 
    } 
    switch(strtolower(preg_replace('/^.*\./','',$filepath))) { 
     // START MS Office 2007 Docs 
     case 'docx': 
      return 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'; 
     case 'docm': 
      return 'application/vnd.ms-word.document.macroEnabled.12'; 
     case 'dotx': 
      return 'application/vnd.openxmlformats-officedocument.wordprocessingml.template'; 
     case 'dotm': 
      return 'application/vnd.ms-word.template.macroEnabled.12'; 
     case 'xlsx': 
      return 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'; 
     case 'xlsm': 
      return 'application/vnd.ms-excel.sheet.macroEnabled.12'; 
     case 'xltx': 
      return 'application/vnd.openxmlformats-officedocument.spreadsheetml.template'; 
     case 'xltm': 
      return 'application/vnd.ms-excel.template.macroEnabled.12'; 
     case 'xlsb': 
      return 'application/vnd.ms-excel.sheet.binary.macroEnabled.12'; 
     case 'xlam': 
      return 'application/vnd.ms-excel.addin.macroEnabled.12'; 
     case 'pptx': 
      return 'application/vnd.openxmlformats-officedocument.presentationml.presentation'; 
     case 'pptm': 
      return 'application/vnd.ms-powerpoint.presentation.macroEnabled.12'; 
     case 'ppsx': 
      return 'application/vnd.openxmlformats-officedocument.presentationml.slideshow'; 
     case 'ppsm': 
      return 'application/vnd.ms-powerpoint.slideshow.macroEnabled.12'; 
     case 'potx': 
      return 'application/vnd.openxmlformats-officedocument.presentationml.template'; 
     case 'potm': 
      return 'application/vnd.ms-powerpoint.template.macroEnabled.12'; 
     case 'ppam': 
      return 'application/vnd.ms-powerpoint.addin.macroEnabled.12'; 
     case 'sldx': 
      return 'application/vnd.openxmlformats-officedocument.presentationml.slide'; 
     case 'sldm': 
      return 'application/vnd.ms-powerpoint.slide.macroEnabled.12'; 
     case 'one': 
      return 'application/msonenote'; 
     case 'onetoc2': 
      return 'application/msonenote'; 
     case 'onetmp': 
      return 'application/msonenote'; 
     case 'onepkg': 
      return 'application/msonenote'; 
     case 'thmx': 
      return 'application/vnd.ms-officetheme'; 
      //END MS Office 2007 Docs 

    } 
    return finfo_file(finfo_open(FILEINFO_MIME_TYPE), $filepath); 
}