简体   繁体   中英

Downloading Images from URL in PHP

I have a file, where I read URLs line by line. The URL are links to images. All the image-links work in the browser. Now I want to download them to my current directory. For the record I need to use a PHP-script.

This is how I get my Images:

for ($j; $j< $count;$j++)

{
  // Get Image-URL as String and then do getImage
  $image = $arr[$j];
  $newname = $j;
  getImage($image, $newname);
}

function getImage($image, $newname)
{

    $ch = curl_init($image);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_BINARYTRANSFER,1);
    $rawdata=curl_exec ($ch);
    curl_close ($ch);
    $fp = fopen("$newname.jpg",'w');
    fwrite($fp, $rawdata); 
    fclose($fp);
}

But the problem is, I get all the images, only the last one is viewable. The others I can't open and they only have 1KB .

So what did I do wrong?

Plus I need to also download png-Files later on, so can I then just change the $newname.jpg into $newname.png ?

Thanks in advance, I really need an answer fast, been sitting here for hours, trying to figure it out.

Why not use stream_copy_to_stream ?

function getImage($image, $newname, $fileType = "jpg")
{
    $in = fopen($image, "r");
    $out = fopen("$newname.$fileType",'w');
    stream_copy_to_stream($in, $out); 
    fclose($in); fclose($out);
}

You can also play with stream_set_read_buffer

stream_set_read_buffer($in, 4096);

Just tested this with our avatar pics.

$data = [
    "https://www.gravatar.com/avatar/42eec337b6404f97aedfb4f39d4991f2?s=32&d=identicon&r=PG&f=1",
    "https://www.gravatar.com/avatar/2700a034dcbecff07c55d4fef09d110b?s=32&d=identicon&r=PG&f=1",
];

foreach ($data as $i => $image) getImage($image, $i, "png");

Works perfectly.

Debug: Read the remote headers for more info? $httpresponseheader

var_dump($http_response_header);

or stream_get_meta_data

var_dump(stream_get_meta_data($in), stream_get_meta_data($out));

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM