2010-08-19 6 views
7

J'ai un paquet e-commerce appelé Prestashop. Ils vous permettent de vendre des produits virtuels, des éléments téléchargeables tels que logiciels, livres électroniques, etc.Obtenir le type MIME en PHP sans extension de fichier

Ils ont un problème avec leur logiciel où ils nomment le nom de fichier physique du produit téléchargeable comme un hachage de 40 caractères avec pas d'extension. Ensuite, lorsqu'un client va télécharger le fichier, le système est censé vérifier le type MIME afin qu'il puisse être défini dans l'en-tête avant que le fichier ne soit envoyé au navigateur du client.

Ici réside le problème. Ils utilisent quatre méthodes pour déterminer le type MIME.

  1. finfo_open() fonction, cette extension n'arrive PAS à être installée sur mon hôte, donc elle échoue.
  2. mime_content_type() fonction, cela prend le fichier sans extension et renvoie un type MIME 'text/plain', quel que soit le type MIME. Cette fonction a été dépréciée et mes pensées sont qu'ils ne devraient pas l'utiliser du tout.
  3. exec('file -bi '.escapeshellarg($file)). cela échoue aussi sur mon hôte.
  4. un tableau d'extensions pour correspondre au type MIME.

J'ai du mal à comprendre cela parce qu'ils nomment le fichier, lorsque vous l'ajoutez au backoffice sans extension. Il m'est difficile de voir que cela fonctionne toujours.

J'ai essayé de nombreuses autres corrections, y compris obtenir le CURLINFO_CONTENT_TYPE d'un appel de cURL pour télécharger le fichier, qui, BTW, renvoie 'texte/plain' pour le même fichier.

Des idées sur la façon dont je peux remédier à ce problème?

solution utilisée ...

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'; 
} 
+0

BTW, tous mes fichiers téléchargeables seront PDF – MB34

+4

Si vous avez accès au code, et vous savez que tous vos fichiers seront au format PDF, vous pouvez simplement coder en dur la fonction de détection de type (s) pour retourner "application/pdf" ... – cHao

+0

C'est ce que nous faisons pour le moment mais, au cas où nous commencerions à proposer d'autres types, je devrais être plus flexible. – MB34

Répondre

0

Puisque vous avez accès au code, vous pouvez modifier la méthode d'enregistrement d'un fichier où il est converti dans le hachage et ajouter quelques blocs de code:
1) Avant de sauvegarder le fichier, sauvegardez l'extension vous-même.
2) Une fois le hachage généré, ajoutez l'extension au fichier et enregistrez-la ou enregistrez-la quelque part (fichier de données, base de données, etc.)
3) Et mettez à jour n'importe où le hachage est généré pour tenir compte de l'extension.

Cela pourrait ne pas être une solution au problème réel avec le logiciel, mais il devrait vous permettre de préserver les filetype ...

+0

I était capable de changer le code force le type mime basé sur l'extension du nom_fichier_afficheur, qui est le nom du fichier que la boîte de dialogue de téléchargement obtient. – MB34

Questions connexes