php - मुझे mcs-type.csv फ़ाइल को "एप्लिकेशन/ऑक्टेट-स्ट्रीम" के रूप में क्यों मिल रहा है?




http-headers mime-types (3)

मैं एक PHP अनुप्रयोग पर काम कर रहा हूं जिसे MySQL में एक्सेल फ़ाइल आयात करना होगा। तो मुझे एक्सेल फ़ाइल को .csv प्रारूप में कनवर्ट करने की आवश्यकता है। लेकिन जब मैं $_FILE['something']['type'] का उपयोग करके अपना प्रकार प्राप्त करना चाहता हूं, तो मुझे application/octet-stream अपने माइम-प्रकार के रूप में मिलता है;
मुझे लगता है कि यहां कुछ गड़बड़ है। क्योंकि मैंने नीचे दी गई सूची को .csv फ़ाइल mime-type के रूप में एकत्र किया है:

text/comma-separated-values,  
text/csv,  
application/csv, 
application/excel, 
application/vnd.ms-excel, 
application/vnd.msexcel

क्या बात है ?


आपके द्वारा सूचीबद्ध सभी माइम-प्रकारों को http://filext.com/file-extension/CSV पर csv फ़ाइलों के लिए सामान्य माइम-प्रकार के रूप में दिखाया गया है

तो मूल रूप से मैं कहूंगा कि यह नीचे आता है कि किस प्रोग्राम ने .csv फ़ाइल जेनरेट की है और किस माइम-टाइप ने उनका उपयोग करने का निर्णय लिया है।


इन तरह के समय में, आधिकारिक HTTP विनिर्देश हमेशा सहायक होता है। आरएफसी 2616 7.2.1 से (मेरा जोर जोड़ा गया):

किसी भी HTTP / 1.1 संदेश में एक इकाई-बॉडी युक्त एक सामग्री-प्रकार हेडर फ़ील्ड शामिल होना चाहिए जिसमें उस शरीर के मीडिया प्रकार को परिभाषित किया गया हो। यदि और केवल अगर मीडिया प्रकार किसी सामग्री-प्रकार फ़ील्ड द्वारा नहीं दिया गया है, तो प्राप्तकर्ता मई की सामग्री को निरीक्षण करने के लिए उपयोग की जाने वाली यूआरआई की सामग्री और / या नाम एक्सटेंशन के निरीक्षण के माध्यम से मीडिया प्रकार का अनुमान लगाने का प्रयास कर सकता है। यदि मीडिया प्रकार अज्ञात रहता है, तो प्राप्तकर्ता को इसे "एप्लिकेशन / ऑक्टेट-स्ट्रीम" प्रकार के रूप में देखना चाहिए

आपकी समस्या का कारण यह है कि फ़ाइल अपलोड को स्वीकार करने वाला सर्वर स्वयं नहीं जानता कि किस प्रकार की फ़ाइल अपलोड की गई है। क्यूं कर? क्योंकि यह उस HTTP संदेश पर निर्भर करता है जिसने फ़ाइल को सटीक माइम-प्रकार निर्धारित करने के लिए Content-Type शीर्षलेख निर्दिष्ट करने के लिए भेजा है। ब्राउज़र ने संभवतः Content-Type शीर्षलेख नहीं भेजा है और सर्वर ने उपरोक्त आधिकारिक HTTP विनिर्देश अंश के अनुसार application/octet-stream ग्रहण किया है। यह भी संभव है कि फ़ाइल अपलोड करने वाले क्लाइंट ने फ़ाइल के माइम प्रकार को निर्धारित न करने का विकल्प चुना और Content-Type: application/octet-stream हेडर स्वयं ही भेजा।

अब, जब हम इसे POST फ़ाइल अपलोड दस्तावेज़ों के संबंध में PHP मैन्युअल प्रविष्टि के संयोजन के रूप में देखते हैं, तो हम निम्न को देखते हैं:

$_FILES['userfile']['type']

फ़ाइल के माइम प्रकार, यदि ब्राउजर ने यह जानकारी प्रदान की है। एक उदाहरण "छवि / gif" होगा। हालांकि इस माइम प्रकार को PHP पक्ष पर चेक नहीं किया गया है और इसलिए इसके मान को मंजूरी नहीं दी जाती है।

तो जैसा कि आप देख सकते हैं, भले ही $_FILES['userfile']['type'] निर्दिष्ट है, यह केवल क्लाइंट द्वारा भेजे गए Content-Type शीर्षलेख से मेल खाता है। इस जानकारी को आसानी से फिक्र किया जा सकता है और इस पर भरोसा नहीं किया जाना चाहिए। यदि आपको यह सुनिश्चित करने की आवश्यकता है कि अपलोड की गई फ़ाइल एक विशिष्ट प्रकार का है, तो आपको इसे स्वयं सत्यापित करना होगा।


$_FILE['something']['type'] ब्राउज़र / उपयोगकर्ता ओएस द्वारा पॉप्युलेट किया गया है, इसलिए यह विश्वसनीय नहीं है। यह निर्धारित करने के लिए कि अपलोड की गई फ़ाइल वांछित प्रारूप में है या नहीं, आपको सर्वर की ओर से अपना स्वयं का चेक बनाना चाहिए।





file-format