Getting MIME type in PHP without NO FILE EXTENSION

I have a Prestashop e-commerce package. 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 name of the downloadable product as a 40-char hash with no extension. Then, when the client downloads the file, the system must check the MIME type so that it can be set in the header before the file is sent to the client’s browser.

This is the problem. They use four methods to determine the type of MIME.

  • finfo_open() , this extension happens to NOT be installed on my host so that it doesn't work.
  • mime_content_type() , this takes a file without an extension and returns a "text / plain" MIME type, regardless of which MIME type actually exists. This function is deprecated, and my thoughts are that they should not use it at all.
  • exec('file -bi '.escapeshellarg($file)) . this also does not work on my host.
  • An array of extensions matching the MIME type.

I find it hard to understand because they name the file when you add it to backoffice without the extension. It’s hard for me to understand that this ever works at all.

I tried many other fixes, including getting CURLINFO_CONTENT_TYPE from a cURL call to load a file that, BTW, returns "text / plain" for the same file.

Any ideas on how I can fix 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'; } 
+7
mime-types php
source share
2 answers

Since you have access to the code, you can change the way you save the file in which it is converted to a hash, and add some blocks of code:
1) Before the file is saved, save the extension yourself.
2) After creating the hash, add the extension to the file and save it or write it somewhere (data file, databae, etc.)
3) And update wherever the hash is generated to account for the extension.

It may not be the solution to a real software problem, but it should allow you to save the file type ...

0
source share

The getID3 library can recognize PDF files and many other types of files. Check this:

http://getid3.sourceforge.net/

+2
source share

All Articles