मेरे अधिकांश एप्लिकेशन जहां अपलोड आवश्यक है, मैं कभी-कभी ब्राउज़र (क्लाइंट) द्वारा पूर्वनिर्धारित एमआईएम प्रकारों की सूची के विरुद्ध एमआईएम को सत्यापित करने के लिए व्यवस्थित करता हूं। यह दृष्टिकोण एक सामान्य धारणा बनाता है कि यदि कुछ संदिग्ध चल रहा है, जहां ब्राउज़र अपलोड किए जा रहे फ़ाइल के एमआईएमई प्रकार को संवाद करने में असमर्थ है, तो शायद मैं इस समय इसे संसाधित करना नहीं चाहता हूं।
<?php
$valid_mp3_mimes = array(
'audio/mpeg',
'audio/x-mpeg',
'audio/mp3',
'audio/x-mp3',
'audio/mpeg3',
'audio/x-mpeg3',
'audio/x-mpeg-3',
'audio/mpg',
'audio/x-mpg',
'audio/x-mpegaudio',
'video/mpeg',
'video/x-mpeg',
);
$uploaded_file_mime = $_FILES['upload_field_name']['type'];
if(!in_array($uploaded_file_mime, $valid_mp3_mimes))
{
die('Upload is not a valid MP3 file.');
}
आपको लगता है कि यह आपके उद्देश्यों के लिए पर्याप्त विधि है या नहीं। PHP मैनुअल स्पष्ट रूप से बताता है कि यह जानकारी उपलब्ध है यदि ब्राउज़र ने यह जानकारी प्रदान की है और यह कि MIME प्रकार सर्वर पक्ष पर चेक नहीं किया गया है और इसलिए इसे मंजूर नहीं किया जाना चाहिए।
ध्यान देने योग्य एक बात यह है कि सर्वर पर संसाधनों की उपलब्धता है जो आपको फ़ाइल के सही MIME प्रकार को प्रमाणित करने की अनुमति देती है।
PHP डेवलपर्स के रूप में, हम अधिकांश भाग के लिए प्लेटफ़ॉर्म स्वतंत्र कोड बनाने की लचीलापन पसंद करते हैं (उदाहरण के लिए XAMPP चल रहे विंडोज सिस्टम पर बनाए गए हमारे वेब एप्लिकेशन को बहुत कम संशोधन के साथ लिनक्स होस्टिंग वातावरण में तैनात किया जा सकता है)। हालांकि, एमआईएमई प्रकारों को सत्यापित करते समय, हम प्लेटफ़ॉर्म आश्रित विधियों को शुरू करना शुरू करते हैं जिन्हें इन उपकरणों के अस्तित्व की पुष्टि करने की आवश्यकता होती है (जैसे "फ़ाइल" या "finfo_file")।
यह (CodeIgniter GitHub भंडार से लिया गया) इन उपकरणों का इस्तेमाल करता है और एक काम उदाहरण के बारे में के रूप में पूरी तरह से है के रूप में आप PHP के दायरे के भीतर प्राप्त करने के लिए जा रहे हैं कि अध्ययन के एक कार्यान्वयन के लायक हो सकता है:
यदि फ़ाइल संभव हो, तो फ़ाइल MIME प्रकार अपलोड की गई फ़ाइल के (वास्तविक) MIME प्रकार का पता लगाता है। https://github.com/EllisLab/CodeIgniter/blob/develop/system/libraries/Upload.php#L983
सूत्रों का कहना है
पीएचपी मैनुअल POST पद्धति अपलोड - http://www.php.net/manual/en/features.file-upload.post-method.php
वेबमास्टर टूलकिट माइम प्रकार - http://www.webmaster-toolkit.com/mime-types.shtml
FILExt .mp3 फ़ाइल - http://filext.com/file-extension/MP3
यह एक ऐसा विकल्प है जिसे मैंने नहीं सोचा था .. और मैं परीक्षण नहीं कर सकता क्योंकि मैं – enkore
जीत रहा हूं Win32 [here] के लिए संकलित एक संस्करण है (http://gnuwin32.sourceforge.net/packages/ file.htm)। –
'file' आदेश और PHP के' finfo_file' समारोह माइम प्रकार का निर्धारण करने के लिए एक ही तरीके का उपयोग करें (आमतौर पर संदर्भित '/ usr/share/विविध/magic' द्वारा)। आपके पास अंतर्निहित फ़ंक्शन होने पर 'निष्पादन फ़ाइल' के लिए इसका कोई उपयोग नहीं है। हालांकि, मैं यहाँ है, जहां एक '.mp3' दोनों' finfo_file' द्वारा 'आवेदन/ओकटेट पर stream' और' फ़ाइल -I', के रूप में पता लगाया जा रहा है जब मैं इसे वापस करने के लिए उम्मीद करेंगे 'ऑडियो/mpeg' एक मामला है। दोनों असफल हो रहे हैं। हालांकि, मुझे लगता है कि इसे 'finfo_open' के दूसरे तर्क के रूप में एक बेहतर' जादू 'फ़ाइल के मार्ग को पारित करके हल किया जा सकता है। –