2010-08-19 8 views
7

मेरे पास Prestashop नामक एक ई-कॉमर्स पैकेज है। वे आपको वर्चुअल उत्पाद, डाउनलोड करने योग्य आइटम, जैसे सॉफ़्टवेयर, ई-किताबें इत्यादि बेचने की अनुमति देते हैं।कोई फ़ाइल एक्सटेंशन के साथ PHP में MIME प्रकार प्राप्त करना

उन्हें अपने सॉफ़्टवेयर में कोई समस्या है जहां वे डाउनलोड करने योग्य उत्पाद के भौतिक फ़ाइल नाम को 40-चार हैश के रूप में नामित करते हैं कोई विस्तार नहीं फिर जब कोई ग्राहक फ़ाइल डाउनलोड करने के लिए जाता है, तो सिस्टम को MIME प्रकार की जांच करनी होती है ताकि फ़ाइल को ग्राहक के ब्राउज़र पर भेजने से पहले हेडर में सेट किया जा सके।

यहां समस्या है। वे एमआईएमई प्रकार निर्धारित करने के लिए चार विधियों का उपयोग करते हैं।

  1. finfo_open() फ़ंक्शन, यह एक्सटेंशन मेरे होस्ट पर स्थापित नहीं होता है, इसलिए यह विफल हो जाता है।
  2. mime_content_type() फ़ंक्शन, यह फ़ाइल को कोई एक्सटेंशन नहीं लेता है और एक 'टेक्स्ट/सादा' एमआईएमई प्रकार देता है, इससे कोई फर्क नहीं पड़ता कि एमआईएमई प्रकार वास्तव में क्या है। इस समारोह को हटा दिया गया है और मेरे विचार ये हैं कि उन्हें इसका उपयोग नहीं करना चाहिए।
  3. exec('file -bi '.escapeshellarg($file))। यह मेरे मेजबान पर भी विफल रहता है।
  4. एमआईएम प्रकार से मिलान करने के लिए एक्सटेंशन की एक सरणी।

मुझे इस तथ्य को समझने में कठिनाई हो रही है कि वे फ़ाइल का नाम देते हैं, जब आप इसे बिना विस्तार के बैकऑफिस में जोड़ते हैं। मेरे लिए यह देखना मुश्किल है कि यह कभी भी काम करता है।

मैंने फ़ाइल को डाउनलोड करने के लिए CURLINFO_CONTENT_TYPE को एक कर्ल कॉल से प्राप्त करने सहित कई अन्य फ़िक्सेस की कोशिश की है, जो बीटीडब्लू, उसी फ़ाइल के लिए 'टेक्स्ट/सादा' देता है।

कोई समस्या है कि मैं इस समस्या का समाधान कैसे कर सकता हूं?

समाधान इस्तेमाल किया ...

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, मेरी सभी डाउनलोड करने योग्य फ़ाइलों पीडीएफ़ हो जाएगा – MB34

+4

आप कोड के लिए उपयोग किया है, और आप जानते हैं कि आपके सभी फ़ाइलों को पीडीएफ़ हो जाएगा, तो आप सिर्फ कड़ी मेहनत से कोड प्रकार का पता लगाने समारोह सकता है (एस) "आवेदन/पीडीएफ" वापस करने के लिए ... – cHao

+0

यही वह है जो हम अभी कर रहे हैं, लेकिन अगर हम अन्य प्रकार की पेशकश शुरू करते हैं, तो मुझे और अधिक लचीला होना चाहिए। – MB34

उत्तर

0

जब से तुम कोड के लिए उपयोग किया है, तो आप जहां यह हैश में बदल जाता है एक फ़ाइल को सहेजने की विधि बदलें और कोड के कुछ ब्लॉक जोड़ सकते हैं:
1) फ़ाइल सहेजने से पहले, एक्सटेंशन को स्वयं सहेजें।
2) हैश उत्पन्न होने के बाद, फ़ाइल में एक्सटेंशन संलग्न करें और इसे सहेजें या इसे कहीं रिकॉर्ड करें (डेटाफाइल, डाटाबेस, आदि)
3) और कहीं भी अपडेट करें ताकि एक्सटेंशन को एक्सटेंशन में ले जाने के लिए जेनरेट किया गया हो।

इस सॉफ्टवेयर के साथ वास्तविक समस्या का समाधान नहीं हो सकता है, लेकिन यह आपको फ़ाइल प्रकार की रक्षा करने के लिए अनुमति चाहिए ...

+0

I display_filename के विस्तार के आधार पर कोड बल को माइम-प्रकार को बदलने में सक्षम था, जो फ़ाइल का नाम है जो डाउनलोड संवाद प्राप्त होता है। – MB34

2

getID3 पुस्तकालय पीडीएफ़ और अन्य फ़ाइल प्रकार के एक झुंड को पहचान सकते हैं। इसे देखें:

http://getid3.sourceforge.net/

संबंधित मुद्दे