পিএইচপি ইউআরএল থেকে চিত্র সংরক্ষণ করা হচ্ছে


402

আমার একটি পিএইচপি ইউআরএল থেকে আমার পিসিতে একটি চিত্র সংরক্ষণ করতে হবে। আসুন আমি বলি যে আমার একটি পৃষ্ঠা রয়েছে, এতে http://example.com/image.phpএকটি একক "ফুল" চিত্র রয়েছে, আর কিছুই নয়। আমি এই চিত্রটি কীভাবে একটি নতুন নাম (পিএইচপি ব্যবহার করে) ইউআরএল থেকে সংরক্ষণ করতে পারি?


1
যদি একটি বৃহৎ পরিমাণ বা ফাইল আকার, নোট কপি করে কার্ল পদ্ধতি বাঞ্ছনীয় (ইন 2nd উদাহরণ মত গৃহীত উত্তর ) হিসেবে কার্ল সময় এক তৃতীয়াংশ সময় লাগে 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));

অন্যথায় সিআরএল ব্যবহার করুন :

$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
ধন্যবাদ ভাই, আপনার কোডটি সমস্যার সমাধান করতে আমাকে সহায়তা করে। কিন্তু তোমার দর্শন লগ করা pls সহায়তা পাওয়ার আমাকে স্ক্রিপ্ট স্বয়ংক্রিয় করতে .আমি গড় যখন একটি নতুন GIF চিত্র url আসা ( " example.com/image.php ") তাহলে আমাদের স্ক্রিপ্ট স্বয়ংক্রিয়ভাবে নতুন ইমেজ আনা এবং আমার নির্দেশিকাতে সঞ্চয়?
রিড

32
এবং আপনি কীভাবে জানবেন যে নতুন চিত্র "এসেছিল"?
8:37

2
আমি মনে করি রিয়াদ মানে $_GETইমেজের ইউআরএল থাকা ভেরিয়েবল ব্যবহার করা http://example.com/fetch-image.php?url=http://blabla.com/flower.jpg। এই উদাহরণে ক্ষেত্রে, আপনি শুধু বলতে পেরেছিলাম $_GET['url']আপনার পিএইচপি স্ক্রিপ্ট, তাই মত: $ch = curl_init($_GET['url']);
ম্যাথিয়াস বাইনেস

4
আমি দেখেছি এমন একমাত্র উত্তর হওয়ার জন্য +1 এর মধ্যে বাইনারি পতাকার জন্য "বি" অন্তর্ভুক্ত রয়েছে।
মরগান

34
@ ভার্টেক: কোজ এটি সিগারেট ধূমপান করছিল এবং তার মুখে একটি বড় হাসি ছিল :)
জিম্বো ২

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

42
অত্যন্ত মার্জিত (প্রয়োজন allow_url_fopen)।
আইরিডইন

আমি যেতে চাই নি, কেবল এটি যুক্ত করছি তাই ভবিষ্যতে যদি কোনও ব্যবহারকারী এই পৃষ্ঠায় আসে তবে তারা দেখতে পাবে :) তবে এটি একটি খুব মার্জিত সমাধান
অ্যালেক্সমোরলি-ফিঞ্চ

60
দয়া করে আমার মন্তব্যগুলি উপেক্ষা করুন, এই ফাংশনটি ট্রান্সপার্যান্সির সাথে পুরোপুরি কাজ করে। আমার শিরোনামগুলি ইমেজ / জেপিইগ হিসাবে হার্ড-কোডেড ছিল।
অ্যালেক্সমোরলি-ফিঞ্চ

2
যদি লক্ষ্য ফোল্ডারটি বিদ্যমান না থাকে তবে এটি স্বয়ংক্রিয়ভাবে তৈরি হবে?
মনসটার

3
@ মনস্টার, না, এটি সাধারণ ফাইল সিস্টেমগুলির জন্য নয়।
হালিল Özgür

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

পৃষ্ঠাটিতে একটি অ্যানিমেটেড জিআইএফ চিত্র রয়েছে। একটি ফাইল ফুলের ফোল্ডারে ফুল হিসাবে সংরক্ষণ করা হয় flower তবে এটি ফাঁকা image কোনও চিত্র শো.আর কোনও সমাধান নেই?
riad

ত্রুটি_দ্বিতীয়করণ (E_ALL | E_STRICT) চালু করুন এবং file_get_contents () এর রিটার্ন মানটি পরীক্ষা করুন, তারপরে আপনার যুক্তিসঙ্গত ত্রুটি বার্তা পাওয়া উচিত।
তুষারভোজ করুন

সম্ভবত সাইট অ্যাডমিন বাইরের রেফারেল নিষিদ্ধ করেছে। সেক্ষেত্রে আপনি স্ট্রিম_কন্টেক্সট_ক্রিয়েট () চেষ্টা করে উপযুক্ত HTTP শিরোনাম সেট করতে পারেন। us2.php.net/manual/en/function.stream-context-create.php
ক্যালভিন

urlencode (' example.com/image.php' ) == 'http% 3A% 2F% 2Fexample.com% 2Fimage.php', আপনি যা চান তা স্পষ্টতই নয়। ফাইলটি বাইনারিও রয়েছে, সঠিক পতাকা সেট করা দরকার।
19

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 হ'ল উদাহরণ . com/image.php । লক্ষ্য করুন যে এটি একটি পিএইচপি উত্পন্ন চিত্র, সাধারণ জেপিগ নয়।
অ্যান্ড্রু

9
চিত্রটির প্রজন্ম বা ফাইলের প্রসার কীভাবে প্রশ্নের সাথে প্রাসঙ্গিক?
Sam152

fopen এর অনুমতি_url_fopen = 1ও দরকার
zloctb

পিএইচপি ডকুমেন্টেশন থেকে স্যামথহম্পসন এর অর্থ হ'ল আকার (সাধারণত 8192)।
দান

এএফআইকে ফ্রিড অনুরোধকৃত 8 কে-এর চেয়ে সংক্ষিপ্ত অংশ ফিরে আসতে পারে। লেখার জন্য আপনাকে কী কার্যকর দৈর্ঘ্য গণনা করতে হবে?
সের্গেই

25

সিআরএল সহ ভার্টেকের উত্তর আমার পক্ষে কার্যকর হয়নি। এটি আমার নির্দিষ্ট সমস্যার কারণে সামান্য উন্নতির সাথে ঘটেছিল with

যেমন,

সার্ভারে যখন কোনও পুনর্নির্দেশ হয় (যেমন আপনি যখন ফেসবুক প্রোফাইল চিত্রটি সংরক্ষণ করার চেষ্টা করছেন) আপনার নিম্নলিখিত বিকল্পের সেটটি প্রয়োজন হবে:

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
ধন্যবাদ জিউল, সত্যই এবং স্টো আরও অনুসন্ধানের পরে সময় ব্যয় করার পরে সত্যই সহায়ক বলে মনে করেছে
রাকেশ শর্মা

উজ্জ্বল - যে এত সাহায্য করেছে! ভার্টেক্সের উত্তরেও লক্ষ্য করা উচিত
নিক

10

আমি কাজ করার জন্য অন্য কোনও সমাধান পেতে সক্ষম হইনি, তবে আমি উইজেটটি ব্যবহার করতে সক্ষম হয়েছি:

$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

আপনি যে পিএইচপি স্ক্রিপ্টটি তৈরি করতে চলেছেন সেই পথটিতে অবস্থিত চিত্রগুলির নামের একটি ফোল্ডার তৈরি করুন। এটির প্রত্যেকটির লেখার অধিকার রয়েছে কিনা তা নিশ্চিত করুন বা স্ক্রিপ্টগুলি কাজ করবে না (এটি ডিরেক্টরিতে ফাইলগুলি আপলোড করতে সক্ষম হবে না)।


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

0

আপনার সার্ভারে wkhtmltoimage ইনস্টল করুন তারপরে আপনার টার্গেটের ইউআরএল থেকে একটি চিত্র তৈরি করার জন্য আমার প্যাকেজ প্যাকেজ.অগ্রগ / প্যাকেজ / টোহিদহাববি / htmltoimage ব্যবহার করুন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.