Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • Home
  • SEARCH
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 1030861
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 16, 20262026-05-16T13:50:17+00:00 2026-05-16T13:50:17+00:00

I have an e-commerce package called Prestashop. They allow you to sell virtual products,

  • 0

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';
}
  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-16T13:50:18+00:00Added an answer on May 16, 2026 at 1:50 pm

    Since you have access to the code, you can change the method of saving a file where it is converted into the hash and add some blocks of code:
    1) Before the file is saved, save the extension yourself.
    2) After the hash as been generated, append the extension to the file and save that or record it somewhere (datafile, databae, etc)
    3) And update anywhere that the hash is generated to take the extension into account.

    This might not be a solution to the actual problem with the software, but it should allow you to preserve the filetype…

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

In our e-commerce application, we have different kinds of products having different kinds of
I have some dynamic links that are generated via an e-commerce plugin. They have
I have a question related to Commerce Server related to products basket. Let's assume
We have an E-Commerce site that allows users to buy products, view their shopping
This is probably the most classic database problem. I have an E-commerce software solution
I have designed an e-commerce system whereby I have products which can belong to
My E-Commerce System will have 5 bases type of products: Cell Phones Computers Shoes
I have a commerce system with products in it. The products are categorised and
I have an e-commerce website built upon ASP.net MVC3. It has appx. 200k products.
Here is the thing. Right now I have this e-commerce web site where people

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.