确定excel文件MIMEtypes

我需要确定上传文件的types

上传.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头文件 ), application/vnd.ms-excel不是.xlsx ,而是.xls文件。

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

mime_content_type()不是特别准确,并且已经被弃用,以支持Fileinfo()的mime_content_type ; 尽pipe个人而言,我打开文件并明确testing文件中的某些数据元素,这些数据元素可能不包含在mime_magic签名详细信息中

使用FileInfo而不是mime_content_type(已弃用 )。

关于MIMEtypes和扩展,

 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 webserver的/etc/mime.types下find)

这是一个包装,将正确识别Microsoft Office 2007文档。 使用,编辑和添加更多文件扩展/ mimetypes是简单而直接的。

 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); } 

正如你可以在mime_content_type函数页面上看到的警告,它现在已经过时 ,并被finfo函数取代。

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

安装finfo扩展。

 pecl install fileinfo