2009-04-07 12 views
327

से छवि सहेजना मुझे अपने पीसी पर एक PHP यूआरएल से एक छवि को सहेजने की जरूरत है। मान लें कि मेरे पास एक पृष्ठ है, http://example.com/image.php, जिसमें एक "फूल" छवि है, और कुछ नहीं। मैं इस छवि को यूआरएल से नए नाम (PHP का उपयोग करके) कैसे सहेज सकता हूं?PHP यूआरएल

उत्तर

596

यदि आप allow_url_fopen सेट true करने के लिए है:

$url = 'http://example.com/image.php'; 
$img = '/my/folder/flower.gif'; 
file_put_contents($img, file_get_contents($url)); 

वरना cURL का उपयोग करें:

$ch = curl_init('http://example.com/image.php'); 
$fp = fopen('/my/folder/flower.gif', 'wb'); 
curl_setopt($ch, CURLOPT_FILE, $fp); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_exec($ch); 
curl_close($ch); 
fclose($fp); 
+1

धन्यवाद भाई, आपका कोड समस्या को हल करने में मेरी सहायता करता है। लेकिन क्या आप स्क्रिप्ट को स्वचालित बनाने में मेरी मदद कर सकते हैं। मेरा मतलब है कि जब एक नई gif छवि url ("http://example.com/image.php") पर आती है तो हमारी स्क्रिप्ट स्वचालित रूप से नई छवि लाती है और उसे स्टोर करती है मेरी निर्देशिका? – riad

+26

और आप कैसे जानते हैं कि नई छवि "आई" है? ? //example.com/fetch-image.php url = http: // blabla.com/flower.jpg' – vartec

+2

मैं एक '$ _GET' छवि' http के URL को शामिल चर का उपयोग कर रियाद साधन लगता है। इस उदाहरण के मामले में, आप अपनी PHP स्क्रिप्ट में '$ _GET [' url ']' को कॉल कर सकते हैं, जैसे: '$ ch = curl_init ($ _ GET ['url']);'। –

57
$content = file_get_contents('http://example.com/image.php'); 
file_put_contents('/my/folder/flower.jpg', $content); 
+0

पेज एक एनिमेटेड GIF छवि पहना हुआ है। एक फ़ाइल फ़ोल्डर में फूल.gif के रूप में संग्रहीत है। लेकिन यह खाली है। कोई छवि शो नहीं। कोई समाधान? – riad

+0

error_reporting (E_ALL | E_STRICT) चालू करें और file_get_contents() के वापसी मान की जांच करें, तो आपको एक उचित त्रुटि संदेश प्राप्त करना चाहिए। – soulmerge

+0

शायद साइट व्यवस्थापक ने रेफरल के बाहर वर्जित किया है। उस स्थिति में आप stream_context_create() को आज़मा सकते हैं और उपयुक्त HTTP शीर्षलेख सेट कर सकते हैं। http://us2.php.net/manual/en/function.stream-context-create.php – Calvin

24

यहां आपको उदाहरण image.jpg करने के लिए दूरस्थ छवि बचाता है।

function save_image($inPath,$outPath) 
{ //Download images from remote server 
    $in= fopen($inPath, "rb"); 
    $out= fopen($outPath, "wb"); 
    while ($chunk = fread($in,8192)) 
    { 
     fwrite($out, $chunk, 8192); 
    } 
    fclose($in); 
    fclose($out); 
} 

save_image('http://www.someimagesite.com/img.jpg','image.jpg'); 
+0

लोग यूआरएल http://example.com/image.php है। ध्यान दें कि यह एक PHP उत्पन्न छवि है जो एक साधारण जेपीईजी नहीं है। – andrew

+9

प्रश्न के लिए प्रासंगिक सभी छवियों या फाइल एक्सटेंशन की पीढ़ी कैसी है? – Sam152

+0

fopen की अनुमति allow_url_fopen = 1 भी – zloctb

9

मैं अन्य समाधान के किसी भी प्राप्त करने के लिए काम करने में सक्षम नहीं था, लेकिन मैं wget का उपयोग करने में सक्षम था:

$tempDir = '/download/file/here'; 
$finalDir = '/keep/file/here'; 
$imageUrl = 'http://www.example.com/image.jpg'; 

exec("cd $tempDir && wget --quiet $imageUrl"); 

if (!file_exists("$tempDir/image.jpg")) { 
    throw new Exception('Failed while trying to download image'); 
} 

if (rename("$tempDir/image.jpg", "$finalDir/new-image-name.jpg") === false) { 
    throw new Exception('Failed while trying to move image file from temp dir to final dir'); 
} 
1

पथ आप की योजना बना रहे में स्थित एक फ़ोल्डर नामित चित्र बनाएं उस PHP स्क्रिप्ट को रखें जिसे आप बनाना चाहते हैं। सुनिश्चित करें कि इसमें सभी के लिए लिखने के अधिकार हैं या स्क्रिप्ट काम नहीं करेंगे (यह निर्देशिका में फ़ाइलों को अपलोड करने में सक्षम नहीं होगी)।

19

Vartec's answercURL के साथ मेरे लिए काम नहीं किया। यह मेरी विशिष्ट समस्या के कारण मामूली सुधार के साथ किया।

जैसे,

जब सर्वर पर एक रीडायरेक्ट नहीं है (जैसे कि जब आप फेसबुक प्रोफाइल छवि को बचाने की कोशिश कर रहे हैं) आप विकल्प सेट निम्नलिखित की आवश्यकता होगी:

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 

पूर्ण समाधान बन जाता है:

$ch = curl_init('http://example.com/image.php'); 
$fp = fopen('/my/folder/flower.gif', 'wb'); 
curl_setopt($ch, CURLOPT_FILE, $fp); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
curl_exec($ch); 
curl_close($ch); 
fclose($fp); 
+1

धन्यवाद zuul, वास्तव में और स्टो वास्तव में अधिक खोज या व्यतीत समय के बाद उपयोगी पाया –

+0

शानदार - इससे बहुत मदद मिली है! Vartecs उत्तर पर भी ध्यान दिया जाना चाहिए – Nick

3
$img_file='http://www.somedomain.com/someimage.jpg' 

$img_file=file_get_contents($img_file); 

$file_loc=$_SERVER['DOCUMENT_ROOT'].'/some_dir/test.jpg'; 

$file_handler=fopen($file_loc,'w'); 

if(fwrite($file_handler,$img_file)==false){ 
    echo 'error'; 
} 

fclose($file_handler); 
206
copy('http://example.com/image.php', 'local/folder/flower.jpg'); 
+34

बेहद सुरुचिपूर्ण ('allow_url_fopen' की आवश्यकता है)। – Iiridayn

+7

यह पीएनजी पारदर्शिता –

+0

नहीं रखता मैं एक जाना होने एकदम चमक, बस इसे इतना जोड़ने यदि कोई उपयोगकर्ता भविष्य में इस पृष्ठ पर आते हैं, वे देखेंगे :) लेकिन यह एक बहुत ही सुरुचिपूर्ण समाधान है –

3

file()PHP Manual देखें:

$url = 'http://mixednews.ru/wp-content/uploads/2011/10/0ed9320413f3ba172471860e77b15587.jpg'; 
$img = 'miki.png'; 
$file = file($url); 
$result = file_put_contents($img, $file) 
+2

को allow_url_fopen = – zloctb

+0

पर कभी भी $ img का उपयोग नहीं करना चाहिए? –

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