2011-03-07 24 views
7

finfo फ़ंक्शन पागल माइम प्रकार लौट रहा है। निम्नलिखित कोड देखें, क्या चल रहा है?PHP सही माइम प्रकार

<?php 
    $files = array ("css.css", "index.html", "js.js", "png.png"); 

    $info = finfo_open (FILEINFO_MIME_TYPE); 

    for ($i = 0; $i < count ($files); $i ++) { 
     $type = finfo_file ($info, $files[$i]); 

     $files[$i] = $type; 
    } 

    finfo_close ($info); 

    echo $files[0]; // text/x-c -> WHAT ?! 
    echo $files[1]; // text/html -> Ok ! 
    echo $files[2]; // text/x-c++ -> WHAT ?! 
    echo $files[3]; // image/png -> Ok ! 
?> 

धन्यवाद

उत्तर

10

मैं fileinfo के कामकाज के साथ घनिष्ठ रूप से परिचित नहीं हूँ, लेकिन मुझे लगता है कि यह सामान्य है। टेक्स्ट फाइलें (और यही सीएसएस और जेएस हैं) कोई स्पष्ट संकेतक प्रदान नहीं करती कि यह किस सामग्री में है। उनके पास कोई हेडर बाइट्स नहीं है, कोई परिभाषित संरचना नहीं है। तो सभी गरीब fileinfo अनुमान लगा सकते हैं - खराब परिणामों के साथ, जैसा कि आप देख सकते हैं।

मुझे लगता है कि .js और .css फ़ाइलों की सामग्री को सफलतापूर्वक सत्यापित करने के लिए, आपको या तो विस्तार पर भरोसा करना है, या वास्तव में पार्स उन्हें सही, उचित पार्सर के साथ भरोसा करना है।

0

क्या आपने अपने सर्वर की माइम प्रकार परिभाषाओं की जांच की है? मुझे लगता है कि यह सर्वर परिभाषाओं का उपयोग करता है जैसे ब्राउजर अपलोड की गई फ़ाइलों के लिए क्लाइंट कंप्यूटर परिभाषा का उपयोग करते हैं।

2

जांच इस

<?php 
$files = array ("css.css", "index.html", "js.js", "png.png"); 

    for ($i = 0; $i < count ($files); $i ++) { 
     $files[$i] = preg_replace("%.*\.(\w)%i", "$1", $files[$i]); 
    } 

    echo $files[0]; //css 
    echo $files[1]; //html 
    echo $files[2]; //js 
    echo $files[3]; //png 
?> 
6

वर्तमान में, finfo

https://bugs.php.net/bug.php?id=53035

यह वास्तविक माइम डेटाबेस की सामग्री से कोई लेना देना मिला है के साथ एक बग हो सकता है, लगता है के रूप में किसी भी करने का विरोध किया गलत तर्क

मैं जो कर रहा हूं (जो अधिक कठोर परिस्थितियों के लिए उपयोगी नहीं हो सकता है) हार्ड कोड सही माइम प्रकार है जो मुझे पता है कि मुझे इसकी आवश्यकता होगी ताकि हार्ड कोडिंग को अगले के लिए टिप्पणी करने की आवश्यकता होगी PHP का संस्करण। À ला:

$info = finfo_open(FILEINFO_MIME_TYPE);  
$mime_type = finfo_file($info, $file_name); 
$extension = pathinfo($file_name,PATHINFO_EXTENSION); 

//there is a bug with finfo_file(); 
//https://bugs.php.net/bug.php?id=53035 
// 
// hard coding the correct mime types for presently needed file extensions 
switch($extension){ 

    case 'css': 
     $mime_type = 'text/css'; 
    break; 
    case 'js': 
     $mime_type = 'application/javascript'; 
    default: 
    break; 
} 
संबंधित मुद्दे