2011-02-24 13 views
28

संभव डुप्लिकेट:
Is it safe to serve an image on the web without an extension?क्या मैं <img> में विस्तार किए बिना छवियों का उपयोग कर सकता हूं?

मैं एक पेज में <img src="advertisements/12" style="border: 1px solid"> की तरह कुछ का उपयोग करना चाहते हैं। फ़ायरफ़ॉक्स इसे प्रदर्शित नहीं करेगा, जो मुझे लगता है कि मुझे फ़ाइल के लिए फ़ाइल एक्सटेंशन होना है। क्या मैं यहां (अन्य ब्राउज़रों के लिए भी) हूं, या एफएफ जैसे माइम प्रकार करता हूं?

संपादित

मैं सामान के सभी प्रकार की कोशिश की है और यह अभी भी काम नहीं करेगा। अब मैं फ़ाइल पर एक विस्तार सही ढंग से डालता हूं (उदाहरण के लिए फ्लैश के लिए एसएसएफ)। मैंने निर्देशिका, इत्यादि को बदल दिया है। जब मैं file_exists() पर कॉल करता हूं, तो फाइल वहां है, सभी खुश और इस तरह, हालांकि मैं इसे पृष्ठ पर प्रस्तुत करने के लिए बिल्कुल नहीं प्राप्त कर सकता हूं। यह या तो img टैग, या एक फ्लैश ऑब्जेक्ट में पीएनजी हो सकता है। न तो काम करता है। मैं क्या गलत कर रहा हूं :-( इसके अलावा, यदि मैं स्क्रिप्ट की तलाश में फ़ाइल में एक गैर-अपलोड की गई फ़ाइल का नाम बदलता हूं, तो यह ठीक काम करता है, लेकिन अपलोड किए गए लोग नहीं ...

+2

करता है "विज्ञापनों/12" जिस प्रकार का चित्र यह है के लिए सही 'सामग्री-type' HTTP शीर्ष लेख भेजने ? मुझे नहीं लगता कि ब्राउज़र एक्सटेंशन के बारे में परवाह करता है। –

+0

हाँ, आप कर सकते हैं। लेकिन ध्यान रखें कि इससे उपयोगकर्ताओं को परेशान होगा अगर वे कभी भी अपने फाइल सिस्टम में छवियों को सहेजने का फैसला करते हैं। –

उत्तर

25

हां, आपको सक्षम होना चाहिए।

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

यदि कोई वैध एमआईएम प्रकार नहीं है, तो कुछ ब्राउज़र अनुमान लगाने का प्रयास करेंगे कि प्रकार क्या है। वे ऑब्जेक्ट के अनुरोध के विस्तार को देखेंगे, या वे पहले कुछ बाइट्स देखेंगे। यदि यह विफल रहता है, तो आपको एक रेडएक्स मिलता है।

फ़ायरफ़ॉक्स/फ़ायरबर्ड के प्रारंभिक दिनों में कुछ परेशानियों का कारण बनता था, क्योंकि यह माइम प्रकारों के बारे में सख्त था और अक्सर वैध एमआईएम प्रकार के बिना कुछ प्रस्तुत करने से इंकार कर दिया। आईई ने अनुमान लगाया, और इतने सारे मैला वेब सर्वर उन पृष्ठों को प्रस्तुत करेंगे जो IE में ठीक प्रस्तुत करेंगे, लेकिन दूसरों में नहीं। हालांकि, इन दिनों हालात बहुत बेहतर हैं।

तो, जब तक आपका वेब सर्वर सही एमआईएम प्रकार प्रदान कर रहा है जब आईएमजी ऑब्जेक्ट का अनुरोध किया जाता है, तो आप जाने के लिए अच्छे होंगे। यदि आपको समस्याएं आ रही हैं, तो जांचें कि "विज्ञापन/12" अनुरोध कब किया जाता है जब आपका वेब सर्वर क्या कर रहा है।

+2

इस में 302 रीडायरेक्ट कैसे फिट होता है (यदि img src किसी छवि पर रीडायरेक्ट करता है)? – jbyrd

2

एक एमआईएमई प्रकार प्रदान करना मदद कर सकता है, हालांकि सर्वर सैद्धांतिक रूप से सही प्रदान कर रहा है। यदि यह एक विशेष PHP (या समान) स्क्रिप्ट है जो छवि की सेवा कर रहा है, तो आपको यह सुनिश्चित करना होगा कि आप HTTP सामग्री-प्रकार शीर्षलेख को उचित MIME प्रकार पर सेट करें।

आप <img> टैग का उपयोग कर से बचने के लिए चाहते हैं, आप सीएसएस पृष्ठभूमि के साथ conjuntion में <div> उपयोग कर सकते हैं, लेकिन यदि आपको ब्राउज़र किसी भी ज्ञात छवि प्रकार के रूप में advertisements/12 को नहीं पहचानता है मदद करने के लिए नहीं जा रहा है।

+0

यह सिर्फ डिस्क पर संग्रहीत एक छवि है। माइम प्रकार मेरे फ़ाइल ब्राउज़र (नॉटिलस) पर ठीक है – Bojangles

+1

माइम प्रकार की जांच करें जो दिखाता है कि जब छवि वास्तव में परोसा जाता है। अपाचे और इसी तरह का निर्णय अक्सर विस्तार पर आधारित होता है, और यदि उसके पास कोई नहीं है, तो यह एमआईएमई प्रकार को किसी अन्य चीज़ पर डिफ़ॉल्ट कर देगा। छवि को एक विस्तार देने का प्रयास करें और देखें कि क्या यह आपको कहीं भी ले जाता है। यदि ऐसा होता है, तो आपको उस फ़ाइल को पहचानने के लिए अपाचे को मजबूर करने का एक तरीका पता लगाना होगा जैसा कि यह है। – digitlworld

9

सर्वर लौटने वाला क्या है? वास्तव में कुछ भी के लिए फ़ाइल एक्सटेंशन का उपयोग नहीं किया जाता है। ब्राउज़र Content-type शीर्षलेख की जांच कर रहा है, जो image/jpeg या जो भी प्रकार की छवि आप सेवा कर रहे हैं, होना चाहिए।

यह अक्सर उन साइटों में उपयोग किया जाता है जो गतिशील रूप से डेटाबेस की सेवा करते हैं, अक्सर डेटाबेस से। मैंने image.aspx?id=37 जैसे बहुत सारे छवि यूआरएल देखे हैं, जबकि तकनीकी रूप से "एक्सटेंशन" होने पर इसका मतलब यह नहीं है कि यह एक छवि है। यह सब HTTP शीर्षलेख मानों में है।

+0

ठीक है, मेरा पिछला उत्तर यह कह रहा था कि यदि सर्वर आपके द्वारा सेवा की जा रही फ़ाइल में कोई मान्यता प्राप्त एक्सटेंशन नहीं है, तो सर्वर स्वयं ही उस शीर्षलेख को सही ढंग से सेट नहीं करेगा। यह फ़ाइल को पढ़ने के लिए नहीं जा रहा है और यह निर्धारित करने का प्रयास करें कि यह क्या है। – digitlworld

+0

@Digitlworld: सच है, नियमित फ़ाइलों के लिए वेब सर्वर उस तरह की चीज़ को संभालेगा। इस तरह की कस्टम सामग्री के लिए, सर्वर को चलने वाले हेडर या एप्लिकेशन को चलाने के लिए सर्वर को कॉन्फ़िगर करने की आवश्यकता होगी, इसे मैन्युअल रूप से करने की आवश्यकता होगी। (मैं आमतौर पर बाद में अपने सेटअप में पसंद करता हूं।) बेशक, प्रश्न किसी भी अनुप्रयोग ढांचे के सर्वर से संबंधित किसी भी जानकारी को निर्दिष्ट नहीं करता है ... – David

+0

सर्वर PHP5 के साथ अपाचे 2 चला रहा है। फाइलें वास्तव में केवल मानक छवियां या फ्लैश (.SWF) फ़ाइलें हैं। वे सिर्फ एक एक्सटेंशन नहीं था (नहीं था)। – Bojangles

1

वेब फ़ॉर्म से अपलोड की गई छवियों का नाम बदलने के बाद मुझे खुद को समान छवि देखने की समस्याएं मिलीं। चूंकि मेरे पास gif, jpg, jpeg, या png फ़ाइलों का मिश्रण हो सकता है, इसलिए मैं फ़ाइल गुणों को देख रहा था।

जो मैंने समाप्त किया वह एमआईएमई प्रकार की जांच कर रहा था (जो आमतौर पर अपलोड की गई फ़ाइलों को संसाधित करते समय $ _FILES सरणी के भीतर होता है) और फ़ाइल नाम से संबंधित एक्सटेंशन जोड़ना।

if($_FILES[$fieldname]['type'][$key]=='image/gif') { 
    $ext='.gif'; 
} 

if($_FILES[$fieldname]['type'][$key]=='image/jpeg') { 
    $ext='.jpg'; 
} 

if($_FILES[$fieldname]['type'][$key]=='image/pjpeg') { 
    $ext='.jpg'; 
} 

if($_FILES[$fieldname]['type'][$key]=='image/png') { 
    $ext='.png'; 
} 

List of common image mime types.

--Which मेरी समस्या को ठीक के रूप में अपने ब्राउज़र फ़ाइल नाम एक्सटेंशन के बिना बाइनरी फ़ाइलों के रूप में अपनी छवियों को डाउनलोड करने की कोशिश कर रहा था।

सर्वर - डेबियन, अपाचे 2.2, पीएचपी 5.3

वेब क्लाइंट - Kubuntu 11.10, फायरफॉक्स

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

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