2012-06-17 38 views
7

हम जैसे http://site.s3.amazonaws.com/images/some image @name.jpg अंदर $stringUrlencode और file_get_contents

(हाँ, वहाँ यूआरएल के चारों ओर एक खाली स्थान के है) मुझे क्या करना कोशिश कर रहा हूँ एक यूआरएल है भी प्रतिस्थापित):

file_get_contents(http%3A%2F%2Fsite.s3.amazonaws.com%2Fimages%[email protected])[function.file-get-contents]: failed to open stream: No such file or directory

आप कॉपी/ब्राउज़र पता पट्टी में चिपकाएँ http://site.s3.amazonaws.com/images/some image @name.jpg, छवि सेशन होगा तो एन।

क्या बुरा है और इसे कैसे ठीक किया जाए?

+2

तो तुम एक अमान्य URL में URL कर देते हैं और फिर आप आश्चर्य है कि यह काम नहीं करता है? एक प्रश्न के लिए क्या है? कृपया विस्तार से बताएं। – hakre

+1

और किसने आपको बताया कि PHP में 'file_get_contents' या PHP में http स्ट्रीम रैपर आपके ब्राउज़र पता बार की तरह सटीक रूप से काम करता है? आप PHP में उस सुविधा का उपयोग करने से पहले तकनीकी विनिर्देशों के बारे में पहले पढ़ना चाहेंगे। मेरा सुझाव है कि आप मैनुअल पढ़ने के साथ शुरू करें। – hakre

+0

मैं इसके चारों ओर अपने सिर को लपेट नहीं सकता। क्या आप मुझे अपने पूर्ण कोड के साथ/हमें आपूर्ति कर सकते हैं? –

उत्तर

1

आपके द्वारा निर्दिष्ट यूआरएल अवैध है। file_get_contents एक मान्य http यूआरआई (अधिक सटीक, अंतर्निहित http wrapper करता है) की अपेक्षा करता है। चूंकि आपका अमान्य यूआरआई वैध यूआरआई नहीं है, file_get_contents विफल रहता है।

आप अपने अवैध यूआरआई को वैध यूआरआई में बदलकर इसे ठीक कर सकते हैं। वैध यूआरआई कैसे लिखना है RFC3986 में उपलब्ध है। आपको ध्यान रखना होगा कि सभी विशेष पात्रों का सही ढंग से प्रतिनिधित्व किया जाता है। जैसे प्लस-साइन्स पर रिक्त स्थान, और साइन पर वाणिज्यिक URL को एन्कोड किया जाना चाहिए। शुरुआत और अंत में भी अनावश्यक सफेद जगह हटा दी जानी चाहिए।

पूरा होने पर, वेबसर्वर आपको बताएगा कि पहुंच प्रतिबंधित है। इसके बाद आपको इसे हल करने के लिए HTTP फ़ाइल रैपर के लिए HTTP संदर्भ विकल्पों के माध्यम से अतिरिक्त अनुरोध शीर्षलेख जोड़ना पड़ सकता है। आपको PHP मैनुअल में जानकारी मिलती है: http:// -- https:// — Accessing HTTP(s) URLs

+0

कार्य उदाहरण: http://codepad.viper-7.com/jkJjgW – hakre

9

संपूर्ण URL के लिए फ़ंक्शन urlencode() का उपयोग करके, एक अवैध URL उत्पन्न होगा। यूआरएल को छोड़कर यह भी सही नहीं है, क्योंकि ब्राउज़र के विपरीत, file_get_contents() फ़ंक्शन URL normalization निष्पादित नहीं करता है। अपने उदाहरण में, आप %20 साथ रिक्त स्थान को बदलने के लिए की जरूरत है:

$string = str_replace(' ', '%20', $string); 
+0

काम करता है, लेकिन यह बहुत गंदे कामकाज – s3v3n

+1

अंततः कुछ काम करता है, धन्यवाद – nowhere

+0

यह एक अच्छा जवाब है - http://stackoverflow.com/questions/8260564/php-file-get-content-downloading-files-with-spaces-in-the-filename-not-work/8260942 # 8260942 –