Define MIME type of excel file

I need to determine what type of downloaded file

When downloading the .xlsx file, this code:

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

returns:

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

As I know (from here PHP xls, xlsx, ppt, pptx headers ), application/vnd.ms-excel not .xlsx , but the .xls file type is mime.

So why does mime_content_type() return the application/vnd.ms-excel function for the .xlsx file? where is the truth?

+4
source share
4 answers

mime_content_type () is not particularly accurate and deprecated in favor of Fileinfo () mime_content_type ; although I personally open the file and check for explicitly defined data elements in files that may not be included as part of the mime_magic signature data.

+3
source

Use FileInfo instead of mime_content_type (which is deprecated ).

Regarding mime types and extensions,

 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 

(available in /etc/mime.types on your linux web server)

+6
source

Here is a wrapper that will correctly identify Microsoft Office 2007 documents. It is trivial and simple to use, edit and add additional extensions / file types.

 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); } 
+2
source

As you can see the warning on the mime_content_type page, now it is deprecated and replaced with finfo .

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

To install the finfo extension.

 pecl install fileinfo 
+1
source

All Articles