PHP URL से इमेज सेव करना


402

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


1
यदि बड़ी मात्रा या फ़ाइलों के आकार की प्रतिलिपि बनाते हैं, तो ध्यान दें कि CURL विधियां बेहतर हैं (जैसे स्वीकृत उत्तर में दूसरा उदाहरण ) क्योंकि CURL समय के लगभग एक तिहाई लेता है file_put_contentsआदि
ashleedawg

जवाबों:


712

आप की है, तो 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
धन्यवाद भाई, आपका कोड समस्या को हल करने में मेरी मदद करता है। लेकिन u pls मुझे स्क्रिप्ट को स्वचालित बनाने में मदद कर सकता है। मेरा मतलब है कि जब एक नई gif छवि url (" example.com/image.php ") पर आती है तो हमारी स्क्रिप्ट स्वचालित रूप से नई छवि प्राप्त करती है और इसे मेरी निर्देशिका में संग्रहीत करती है?
रियाद i

32
और आप कैसे जानते हैं, कि नई छवि "आई"?
वर्तक

2
मुझे लगता है कि riad का मतलब $_GETछवि के URL वाले चर का उपयोग करना है http://example.com/fetch-image.php?url=http://blabla.com/flower.jpg। इस उदाहरण के मामले में, आप बस $_GET['url']अपनी PHP स्क्रिप्ट में कॉल कर सकते हैं , जैसे $ch = curl_init($_GET['url']);:।
मैथियास ब्यनेंस 13

4
केवल एकमात्र उत्तर होने के लिए मैंने देखा है जिसमें बाइनरी फ्लैग के लिए "बी" शामिल है।
विल मॉर्गन

34
@vartec: coz यह एक सिगरेट पी रहा था और इसके चेहरे पर एक बड़ी मुस्कान थी :)
जिम्बो

252
copy('http://example.com/image.php', 'local/folder/flower.jpg');

42
अत्यधिक सुरुचिपूर्ण (आवश्यकता allow_url_fopen)।
इरिडीन

मैं नहीं जा रहा था, बस इसे जोड़ रहा था ताकि अगर भविष्य में कोई भी उपयोगकर्ता इस पेज पर आए, तो वे देखेंगे :) हालांकि यह एक बहुत ही सुंदर समाधान है
AlexMorley-Finch

60
कृपया मेरी टिप्पणियों को अनदेखा करें, यह फ़ंक्शन पूरी तरह से पारदर्शिता के साथ काम करता है। मैं अपने हेडर छवि / jpeg के रूप में हार्ड कोडित था।
एलेक्समोर्ले-फिंच

2
यदि लक्ष्य फ़ोल्डर मौजूद नहीं है, तो क्या यह स्वचालित रूप से बनाया जाएगा?
मोनस्टर 01

3
@ मेनस्टर, नहीं, यह सामान्य फाइल सिस्टम के लिए नहीं होगा।
हालिल Halzgür

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

पेज एक एनिमेटेड जिफ इमेज पकड़े हुए है। एक फ़ाइल को फ़ोल्डर में flower.gif के रूप में संग्रहीत किया जाता है। लेकिन यह रिक्त है। कोई छवि show.any समाधान नहीं है?
रियाद r

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

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

urlencode (' example.com/image.php' ) == 'http% 3A% 2F% 2Fexample.com% 2Fimage.php', जाहिर है वह नहीं जो आप चाहते हैं। साथ ही फ़ाइल बाइनरी है, उचित ध्वज को सेट करने की आवश्यकता है।
vartec

4
एक पुराने धागे के ... लेकिन आप जिस निर्देशिका में बचत कर रहे हैं, उसके लिए फ़ाइल की अनुमति न भूलें। बस दस मिनट व्यर्थ भूल जाते हैं।
स्क्विग्स।

29

यहां आप जाते हैं, उदाहरण रिमोट इमेज को 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');

दोस्तों url example.com/image.php है । ध्यान दें कि यह एक php जनरेट की गई इमेज है न कि एक साधारण जेपीईजी।
andrew

9
छवि की पीढ़ी या फाइलें सवाल के सभी प्रासंगिक कैसे हैं?
सैम १५२

fopen को allow_url_fopen = 1 भी चाहिए
zloctb

PHP दस्तावेज़ से @SamThompson का अर्थ है चंक आकार (आमतौर पर 8192)।
दान

AFAIK के लिए अनुरोध किए गए 8K की तुलना में छोटा हिस्सा वापस आ सकता है। क्या आपको फिर से लिखने के लिए प्रभावी लंबी लंबाई की गणना करने की आवश्यकता नहीं है?
सेर्गेई

25

Vartec के जवाब के साथ cURL मेरे लिए काम नहीं किया। मेरी विशिष्ट समस्या के कारण इसमें थोड़ा सुधार हुआ।

जैसे,

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

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
धन्यवाद जुउल, वास्तव में & स्टो वास्तव में अधिक खोज या समय बिताने के बाद सहायक पाया गया
राकेश शर्मा

शानदार - जो बहुत मदद की है! Vartecs जवाब पर भी ध्यान दिया जाना चाहिए
निक

10

मैं काम करने के लिए किसी भी अन्य समाधान प्राप्त करने में सक्षम नहीं था, लेकिन मैं 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');
}

यह समाधान भी केवल एक ही था जिसने मेरे लिए काम किया। धन्यवाद एंड्रयू!
sentinel777


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);

1

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


0
$data = file_get_contents('http://example.com/image.php');
$img = imagecreatefromstring($data);
imagepng($img, 'test.png');

0

अपने सर्वर पर wkhtmltoimage स्थापित करें, फिर अपने लक्ष्य के url से एक छवि बनाने के लिए मेरे पैकेज packagist.org/packages/tohidhabiby/htmltoimage का उपयोग करें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.