Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Getting MIME Type in PHP with NO FILE EXTENSION

Tags:

mime-types

php

I have an e-commerce package called Prestashop. They allow you to sell virtual products, downloadable items, such as software, e-books, etc.

They have a problem in their software where they name the physical filename of the downloadable product as a 40-char hash with no extension. Then when a customer goes to download the file, the system is supposed to check the MIME type so it can be set in the header before the file is sent to the customer's browser.

Herein lies the problem. They use four methods to determine the MIME type.

  1. finfo_open() function, this extension happens to NOT be installed on my host so it fails.
  2. mime_content_type() function, this takes the file with no extension and returns a 'text/plain' MIME type, no matter what the MIME type actually is. This function has been deprecated and my thoughts are that they shouldn't be using it at all.
  3. exec('file -bi '.escapeshellarg($file)). this fails on my host as well.
  4. an array of extensions to match the MIME type to.

I'm having difficulty figuring this out because of the fact that they name the file, when you add it to the backoffice with no extension. It is difficult for me to see that this ever works at all.

I've tried numerous other fixes, including getting the CURLINFO_CONTENT_TYPE from a cURL call to download the file, which, BTW, returns 'text/plain' for the same file.

Any ideas as to how I can remedy this problem?

Solution used...

if (empty($mime_type))
{
    $bName = basename($filename);
    $bName = explode('.', $bName);
    $bName = strtolower($bName[count($bName) - 1]);

    $mimeTypes = array(
    'ez'        => 'application/andrew-inset',
    'atom'      => 'application/atom+xml',
    'jar'       => 'application/java-archive',
    'hqx'       => 'application/mac-binhex40',
    'cpt'       => 'application/mac-compactpro',
    'mathml'    => 'application/mathml+xml',
    'doc'       => 'application/msword',
    'dat'       => 'application/octet-stream',
    'oda'       => 'application/oda',
    'ogg'       => 'application/ogg',
    'pdf'       => 'application/pdf',
    'ai'        => 'application/postscript',
    'eps'       => 'application/postscript',
    'ps'        => 'application/postscript',
    'rdf'       => 'application/rdf+xml',
    'rss'       => 'application/rss+xml',
    'smi'       => 'application/smil',
    'smil'      => 'application/smil',
    'gram'      => 'application/srgs',
    'grxml'     => 'application/srgs+xml',
    'kml'       => 'application/vnd.google-earth.kml+xml',
    'kmz'       => 'application/vnd.google-earth.kmz',
    'mif'       => 'application/vnd.mif',
    'xul'       => 'application/vnd.mozilla.xul+xml',
    'xls'       => 'application/vnd.ms-excel',
    'xlb'       => 'application/vnd.ms-excel',
    'xlt'       => 'application/vnd.ms-excel',
    'xlam'      => 'application/vnd.ms-excel.addin.macroEnabled.12',
    'xlsb'      => 'application/vnd.ms-excel.sheet.binary.macroEnabled.12',
    'xlsm'      => 'application/vnd.ms-excel.sheet.macroEnabled.12',
    'xltm'      => 'application/vnd.ms-excel.template.macroEnabled.12',
    'docm'      => 'application/vnd.ms-word.document.macroEnabled.12',
    'dotm'      => 'application/vnd.ms-word.template.macroEnabled.12',
    'ppam'      => 'application/vnd.ms-powerpoint.addin.macroEnabled.12',
    'pptm'      => 'application/vnd.ms-powerpoint.presentation.macroEnabled.12',
    'ppsm'      => 'application/vnd.ms-powerpoint.slideshow.macroEnabled.12',
    'potm'      => 'application/vnd.ms-powerpoint.template.macroEnabled.12',
    'ppt'       => 'application/vnd.ms-powerpoint',
    'pps'       => 'application/vnd.ms-powerpoint',
    'odc'       => 'application/vnd.oasis.opendocument.chart',
    'odb'       => 'application/vnd.oasis.opendocument.database',
    'odf'       => 'application/vnd.oasis.opendocument.formula',
    'odg'       => 'application/vnd.oasis.opendocument.graphics',
    'otg'       => 'application/vnd.oasis.opendocument.graphics-template',
    'odi'       => 'application/vnd.oasis.opendocument.image',
    'odp'       => 'application/vnd.oasis.opendocument.presentation',
    'otp'       => 'application/vnd.oasis.opendocument.presentation-template',
    'ods'       => 'application/vnd.oasis.opendocument.spreadsheet',
    'ots'       => 'application/vnd.oasis.opendocument.spreadsheet-template',
    'odt'       => 'application/vnd.oasis.opendocument.text',
    'odm'       => 'application/vnd.oasis.opendocument.text-master',
    'ott'       => 'application/vnd.oasis.opendocument.text-template',
    'oth'       => 'application/vnd.oasis.opendocument.text-web',
    'potx'      => 'application/vnd.openxmlformats-officedocument.presentationml.template',
    'ppsx'      => 'application/vnd.openxmlformats-officedocument.presentationml.slideshow',
    'pptx'      => 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
    'xlsx'      => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
    'xltx'      => 'application/vnd.openxmlformats-officedocument.spreadsheetml.template',
    'docx'      => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
    'dotx'      => 'application/vnd.openxmlformats-officedocument.wordprocessingml.template',
    'vsd'       => 'application/vnd.visio',
    'wbxml'     => 'application/vnd.wap.wbxml',
    'wmlc'      => 'application/vnd.wap.wmlc',
    'wmlsc'     => 'application/vnd.wap.wmlscriptc',
    'vxml'      => 'application/voicexml+xml',
    'bcpio'     => 'application/x-bcpio',
    'vcd'       => 'application/x-cdlink',
    'pgn'       => 'application/x-chess-pgn',
    'cpio'      => 'application/x-cpio',
    'csh'       => 'application/x-csh',
    'dcr'       => 'application/x-director',
    'dir'       => 'application/x-director',
    'dxr'       => 'application/x-director',
    'dvi'       => 'application/x-dvi',
    'spl'       => 'application/x-futuresplash',
    'tgz'       => 'application/x-gtar',
    'gtar'      => 'application/x-gtar',
    'hdf'       => 'application/x-hdf',
    'js'        => 'application/x-javascript',
    'skp'       => 'application/x-koan',
    'skd'       => 'application/x-koan',
    'skt'       => 'application/x-koan',
    'skm'       => 'application/x-koan',
    'latex'     => 'application/x-latex',
    'nc'        => 'application/x-netcdf',
    'cdf'       => 'application/x-netcdf',
    'sh'        => 'application/x-sh',
    'shar'      => 'application/x-shar',
    'swf'       => 'application/x-shockwave-flash',
    'sit'       => 'application/x-stuffit',
    'sv4cpio'   => 'application/x-sv4cpio',
    'sv4crc'    => 'application/x-sv4crc',
    'tar'       => 'application/x-tar',
    'tcl'       => 'application/x-tcl',
    'tex'       => 'application/x-tex',
    'texinfo'   => 'application/x-texinfo',
    'texi'      => 'application/x-texinfo',
    't'         => 'application/x-troff',
    'tr'        => 'application/x-troff',
    'roff'      => 'application/x-troff',
    'man'       => 'application/x-troff-man',
    'me'        => 'application/x-troff-me',
    'ms'        => 'application/x-troff-ms',
    'ustar'     => 'application/x-ustar',
    'src'       => 'application/x-wais-source',
    'xhtml'     => 'application/xhtml+xml',
    'xht'       => 'application/xhtml+xml',
    'xslt'      => 'application/xslt+xml',
    'xml'       => 'application/xml',
    'xsl'       => 'application/xml',
    'dtd'       => 'application/xml-dtd',
    'zip'       => 'application/zip',
    'au'        => 'audio/basic',
    'snd'       => 'audio/basic',
    'mid'       => 'audio/midi',
    'midi'      => 'audio/midi',
    'kar'       => 'audio/midi',
    'mpga'      => 'audio/mpeg',
    'mp2'       => 'audio/mpeg',
    'mp3'       => 'audio/mpeg',
    'aif'       => 'audio/x-aiff',
    'aiff'      => 'audio/x-aiff',
    'aifc'      => 'audio/x-aiff',
    'm3u'       => 'audio/x-mpegurl',
    'wma'       => 'audio/x-ms-wma',
    'wax'       => 'audio/x-ms-wax',
    'ram'       => 'audio/x-pn-realaudio',
    'ra'        => 'audio/x-pn-realaudio',
    'rm'        => 'application/vnd.rn-realmedia',
    'wav'       => 'audio/x-wav',
    'pdb'       => 'chemical/x-pdb',
    'xyz'       => 'chemical/x-xyz',
    'bmp'       => 'image/bmp',
    'cgm'       => 'image/cgm',
    'gif'       => 'image/gif',
    'ief'       => 'image/ief',
    'jpeg'      => 'image/jpeg',
    'jpg'       => 'image/jpeg',
    'jpe'       => 'image/jpeg',
    'png'       => 'image/png',
    'svg'       => 'image/svg+xml',
    'tiff'      => 'image/tiff',
    'tif'       => 'image/tiff',
    'djvu'      => 'image/vnd.djvu',
    'djv'       => 'image/vnd.djvu',
    'wbmp'      => 'image/vnd.wap.wbmp',
    'ras'       => 'image/x-cmu-raster',
    'ico'       => 'image/x-icon',
    'pnm'       => 'image/x-portable-anymap',
    'pbm'       => 'image/x-portable-bitmap',
    'pgm'       => 'image/x-portable-graymap',
    'ppm'       => 'image/x-portable-pixmap',
    'rgb'       => 'image/x-rgb',
    'xbm'       => 'image/x-xbitmap',
    'psd'       => 'image/x-photoshop',
    'xpm'       => 'image/x-xpixmap',
    'xwd'       => 'image/x-xwindowdump',
    'eml'       => 'message/rfc822',
    'igs'       => 'model/iges',
    'iges'      => 'model/iges',
    'msh'       => 'model/mesh',
    'mesh'      => 'model/mesh',
    'silo'      => 'model/mesh',
    'wrl'       => 'model/vrml',
    'vrml'      => 'model/vrml',
    'ics'       => 'text/calendar',
    'ifb'       => 'text/calendar',
    'css'       => 'text/css',
    'csv'       => 'text/csv',
    'html'      => 'text/html',
    'htm'       => 'text/html',
    'txt'       => 'text/plain',
    'asc'       => 'text/plain',
    'rtx'       => 'text/richtext',
    'rtf'       => 'text/rtf',
    'sgml'      => 'text/sgml',
    'sgm'       => 'text/sgml',
    'tsv'       => 'text/tab-separated-values',
    'wml'       => 'text/vnd.wap.wml',
    'wmls'      => 'text/vnd.wap.wmlscript',
    'etx'       => 'text/x-setext',
    'mpeg'      => 'video/mpeg',
    'mpg'       => 'video/mpeg',
    'mpe'       => 'video/mpeg',
    'qt'        => 'video/quicktime',
    'mov'       => 'video/quicktime',
    'mxu'       => 'video/vnd.mpegurl',
    'm4u'       => 'video/vnd.mpegurl',
    'flv'       => 'video/x-flv',
    'asf'       => 'video/x-ms-asf',
    'asx'       => 'video/x-ms-asf',
    'wmv'       => 'video/x-ms-wmv',
    'wm'        => 'video/x-ms-wm',
    'wmx'       => 'video/x-ms-wmx',
    'avi'       => 'video/x-msvideo',
    'ogv'       => 'video/ogg',
    'movie'     => 'video/x-sgi-movie',
    'ice'       => 'x-conference/x-cooltalk');  
    if (isset($mimeTypes[$bName]))
        $mime_type = $mimeTypes[$bName];
    else
        $mime_type = 'application/octet-stream';
}
like image 723
MB34 Avatar asked Aug 19 '10 15:08

MB34


People also ask

How do I get MIME type extension?

string mimeType = MimeMapping. GetMimeMapping(fileName); If you need to add custom mappings you probably can use reflection to add mappings to the BCL MimeMapping class, it uses a custom dictionary that exposes this method, so you should invoke the following to add mappings (never tested tho, but should prob. work).

How can I get MIME type from uploaded file in PHP?

The mime_content_type() function is an inbuilt function in PHP which is used to get the MIME content-type of a file. Parameters: This function accepts single parameter $file which specifies the path of the file which MIME details to be find. Return Value: This function returns the MIME content type or False on failure.

How do I fix MIME type error?

To Solve MIME type ('text/html') is not a supported stylesheet MIME type, and strict MIME checking is enabled ErrorJust make Sure Your File name and the name You are Using in Link Tag Both Are Same. For Example my File name is style. css Then My Link tag is Something like this:<link rel=”stylesheet” href=”style.


1 Answers

The getID3 library can recognise PDFs and a bunch of other file types. Check it out:

http://getid3.sourceforge.net/

like image 160
dazweeja Avatar answered Nov 14 '22 23:11

dazweeja