2009-07-18 12 views
23

क्या PHP में एक्सटेंशन के लिए एमआईएम प्रकारों का त्वरित और गंदे मैपिंग है जिसका मैं उपयोग कर सकता हूं?मैं PHP में किसी MIME प्रकार से जुड़े एक्सटेंशन (ओं) को कैसे निर्धारित करूं?

+0

PEO कृपया अन्य तरीकों की बजाय * एक्सटेंशन * से * एमआईएमई प्रकार * को मैप करना चाहते हैं, ध्यान दें कि अब इसके लिए अंतर्निहित समर्थन है जिसका उन्हें लाभ उठाना चाहिए - देखें [जॉर्ज का जवाब] (http: // स्वीकार्य एक के बजाय stackoverflow.com/a/20494035/1709587)। –

+1

@MarkAmery हालांकि उल्लेख किया गया है, finfo_file() की आवश्यकता है कि फ़ाइल मौजूद है। जो हमेशा मामला नहीं है। कैओस का उत्तर ओपी के बिंदु पर अभी भी अधिक है और अभी भी 8 साल बाद वैध है। – Wranorn

उत्तर

21

में निर्मित नहीं है, लेकिन यह रोल करने के लिए कठिन बहुत नहीं है अपनी खुद की:

function system_extension_mime_types() { 
    # Returns the system MIME type mapping of extensions to MIME types, as defined in /etc/mime.types. 
    $out = array(); 
    $file = fopen('/etc/mime.types', 'r'); 
    while(($line = fgets($file)) !== false) { 
     $line = trim(preg_replace('/#.*/', '', $line)); 
     if(!$line) 
      continue; 
     $parts = preg_split('/\s+/', $line); 
     if(count($parts) == 1) 
      continue; 
     $type = array_shift($parts); 
     foreach($parts as $part) 
      $out[$part] = $type; 
    } 
    fclose($file); 
    return $out; 
} 

function system_extension_mime_type($file) { 
    # Returns the system MIME type (as defined in /etc/mime.types) for the filename specified. 
    # 
    # $file - the filename to examine 
    static $types; 
    if(!isset($types)) 
     $types = system_extension_mime_types(); 
    $ext = pathinfo($file, PATHINFO_EXTENSION); 
    if(!$ext) 
     $ext = $file; 
    $ext = strtolower($ext); 
    return isset($types[$ext]) ? $types[$ext] : null; 
} 

function system_mime_type_extensions() { 
    # Returns the system MIME type mapping of MIME types to extensions, as defined in /etc/mime.types (considering the first 
    # extension listed to be canonical). 
    $out = array(); 
    $file = fopen('/etc/mime.types', 'r'); 
    while(($line = fgets($file)) !== false) { 
     $line = trim(preg_replace('/#.*/', '', $line)); 
     if(!$line) 
      continue; 
     $parts = preg_split('/\s+/', $line); 
     if(count($parts) == 1) 
      continue; 
     $type = array_shift($parts); 
     if(!isset($out[$type])) 
      $out[$type] = array_shift($parts); 
    } 
    fclose($file); 
    return $out; 
} 

function system_mime_type_extension($type) { 
    # Returns the canonical file extension for the MIME type specified, as defined in /etc/mime.types (considering the first 
    # extension listed to be canonical). 
    # 
    # $type - the MIME type 
    static $exts; 
    if(!isset($exts)) 
     $exts = system_mime_type_extensions(); 
    return isset($exts[$type]) ? $exts[$type] : null; 
} 
+5

मुझे लगता है कि यह एक पुराना जवाब है। अब आपको 'fileinfo' http://www.php.net/manual/en/ref.fileinfo.php –

+6

@ JorgeB.G का उपयोग करना चाहिए। इसके लिए फ़ाइल मौजूद है, है ना? – danronmoon

+1

@ डैन्रोनमून। हाँ यह करता है। – Qix

2

आप एक वेब सेवा का उपयोग करना चाहते हैं, तो मैं बस अपना माइम प्रकार < के हिस्से के रूप में इस बनाया -> आइकन सेवा

http://stdicon.com/

उदाहरण के लिए:

http://stdicon.com/ext/html

यह एपेंगेन पर चलता है इसलिए इसकी उच्च उपलब्धता होनी चाहिए।

+1

-1; इसके लिए वेब सेवा का उपयोग करने की आवश्यकता नहीं है जब इसे स्थानीय रूप से हासिल किया जा सकता है, यह एमआईएमई प्रकार * से * एक्सटेंशन (ओपी के लिए क्या पूछा जाता है) के मैपिंग की अनुमति नहीं देता है, और वेब सेवा के रूप में वर्तमान में खड़े एक्सटेंशन में कमी है जो मेरे स्थानीय सामान्य उबंटू इंस्टॉलेशन पर 'mime.types' फ़ाइल '.woff' की तरह समझती है। –

+0

http://stdicon.com पर नेविगेट करना मेरे लिए एक त्रुटि उत्पन्न करता है। पेस्टबिन से लिंक करें: http://pastebin.com/BjkGRv7H। यह ध्यान देने योग्य है कि सेवा स्वयं ठीक काम करती है। – starbeamrainbowlabs

6

आप mime_content_type का उपयोग कर सकते हैं लेकिन इसे हटा दिया गया है। बजाय fileinfo का उपयोग करें:

function getMimeType($filename) { 
    $finfo = finfo_open(FILEINFO_MIME_TYPE); 
    $mime = finfo_file($finfo, $filename); 
    finfo_close($finfo); 
    return $mime; 
} 
+4

यह ध्यान देने योग्य है कि ओपी ने वास्तव में एमआईएम प्रकार * से * फ़ाइल एक्सटेंशन को मैप करने के लिए कहा था। इसमें अभी भी सबसे आम उपयोग मामले (और शायद ओपी का सामना करना पड़ रहा था) शामिल है, इसलिए यह निश्चित रूप से अस्तित्व में है और मैंने इसे +1 किया है, लेकिन यह * कथित रूप से प्रश्न का उत्तर नहीं है जिसे पैडेंटिक रूप से पूछा गया था व्याख्या की। –

+8

नोट: 'finfo_file()' और 'mime_content_type() 'की आवश्यकता है कि फ़ाइल मौजूद है। – Pang

+2

कहां कहता है कि इसे बहिष्कृत किया गया है? – Greg

2

आप छवियों के सीमित एक्सटेंशन भिन्न है और बहुत ही सरल कुछ चाहिए के साथ काम कर रहे हैं, तो मुझे लगता है कि यह पर्याप्त है।

switch($info['mime']) 
    { 
    case 'image/gif' : $extension = 'gif'; break; 
    case 'image/png' : $extension = 'png'; break; 
    case 'image/jpeg' : $extension = 'jpg'; break; 

    default : 
     throw new ApplicationException('The file uploaded was not a valid image file.'); 
    break; 
    } 
2

आप इस पुस्तकालय का उपयोग करना चाहें: https://github.com/ralouphie/mimey

उदाहरण उपयोग:

$mimes = new \Mimey\MimeTypes; 

// Convert extension to MIME type: 
$mimes->getMimeType('json'); // application/json 

// Convert MIME type to extension: 
$mimes->getExtension('application/json'); // json 

इसका कारण यह है जाहिरा तौर पर प्रदान की पीएचपी कार्यों की गुणवत्ता संदिग्ध है।

0

उपयोग इस फ़ाइल: https://github.com/ralouphie/mimey/blob/develop/mime.types.php

इस तरह:

$mimes=include('mime.types.php'); 

या कॉपी सामग्री:

$mime= array (
    'mimes' => 
    array (
    'ez' => 
    array (
     0 => 'application/andrew-inset', 
    ), 
    'aw' => 
    array (
     0 => 'application/applixware', 
    ), 
    'atom' => 
    array (
     0 => 'application/atom+xml', 
    ), 
    'atomcat' => 
    array (
     0 => 'application/atomcat+xml', 
    ) 

    ... 

और एक धारा से हो रही का एक उदाहरण:

$finfo = new \finfo(FILEINFO_MIME_TYPE); 
$mime=$finfo->buffer($data); 
$mimes=include(__DIR__."/mime.types.php"); 
echo ($mime); //mime 
echo ($mimes['extensions'][$mime]); // file extension 
संबंधित मुद्दे