2010-01-05 18 views
6

में किसी यूआरएल से एक छवि अपलोड कैसे कर सकता हूं जीडी या इमेजमैजिक का उपयोग करके PHP में मैं एक यूआरएल से एक फोटो कैसे उतार सकता हूं, मैं एक ऐसा फ़ंक्शन बनाना चाहता हूं जिसे मैं कुछ पैरामीटर में पास कर सकता हूं और छवि को ऊपर उठा सकता हूं। एक बड़ी छवि को चालू कर सकते हैं, इसे छोटा आकार दें, फिर इसे बंद करने के लिए कुछ और थंबनेल का आकार बदलें और सभी को 1 छवि से वहां से स्थानांतरित करें, लेकिन मैं एक यूआरएल से एक छवि प्राप्त करने की क्षमता जोड़ना चाहता हूं और फिर अपना कोड उस पर चला सकता हूं आकार बदलें और अंगूठे बनाओ।मैं PHP

मैं कर्ल का उपयोग करेंगे या कुछ और किसी भी उदाहरण या विचारों होगा बहुत

उत्तर

11
$image = @ImageCreateFromString(@file_get_contents($imageURL)); 

if (is_resource($image) === true) 
{ 
    // image is valid, do your magic here 
} 

else 
{ 
    // not a valid image, show error 
} 

दोनों कार्यों वहाँ अगर त्रुटियों फेंकने से पीएचपी को रोकने के लिए कर रहे हैं पर @ सक्षम होते हैं यूआरएल वैध छवि नहीं है।

+1

तक 'file_get_contents' बेहतर है' संभवत: 'FILE_BINARY' ध्वज जोड़ना चाहिए ... – Rob

+0

@Rob: FILE_BINARY: यह ** डिफ़ॉल्ट सेटिंग ** है और FILE_TEXT के साथ इसका उपयोग नहीं किया जा सकता है। उल्लेख नहीं है कि यह केवल PHP 6 पर लागू होता है। –

+0

यह बहुत अच्छा लगता है अगर यह काम करता है कि मैं इसे कैसे चाहता हूं, तो इस मामले में $ छवि में वास्तव में मेरी सर्वर मेमोरी पर फ़ाइल है, जैसे कि मैं एक फॉर्म पोस्ट के साथ अपलोड करना चाहता था ? – JasonDavis

2

सराहना अपने PHP विन्यास पर निर्भर करता है, fopen या इसके लिए सीधे अनुमति नहीं दे सकती हो सकता है: http://php.net/manual/en/function.fopen.php

वैकल्पिक रूप से, आप खोल सकते हैं एक सॉकेट (http://php.net/manual/en/book.sockets.php) और HTTP (http://www.faqs.org/rfcs/rfc2616.html) सीधे लिखें/पढ़ें। मैं कर्ल का उपयोग नहीं करता जबतक कि आप अनुमतियों (विशेष रूप से निष्पादित) के बारे में बहुत सावधान नहीं हैं, या गारंटी दे सकते हैं कि किसी भी दुर्भावनापूर्ण को उपकरण तक पहुंच नहीं होगी, क्योंकि आप प्रभावी रूप से हमले के संभावित रास्ते को खोलेंगे (अच्छी तरह से, कड़ाई से बोलते हुए, आप पहले से ही हैं, लेकिन यह कुछ अलग अलग तरीकों से यह गाली दी जा सकती है) है

0
$img = ''; 
$fp = fopen($url, 'rb'); 
if($fp) { 
    while($buf = fread($fp, 1024)) { 
     $img .= $buf; 
    }  
} 
fclose($fp); 

// यूआरएल संभालने fopen रैपर

+0

यह काम करता है, लेकिन –