在PHP中从URL下载图像

时间:2015-07-06 11:46:38

标签: php image curl

我有一个文件,我逐行读取URL。 URL是图像的链接。所有图像链接都在浏览器中工作。现在我想将它们下载到我当前的目录。为了记录,我需要使用PHP脚本。

这就是我获取图像的方式:

  0 Mon Jul 06 13:13:46 CEST 2015 META-INF/
 25 Mon Jul 06 13:13:46 CEST 2015 META-INF/MANIFEST.MF
  0 Mon Jul 06 13:13:46 CEST 2015 hello/
369 Mon Jul 06 13:13:46 CEST 2015 hello/Greeter.class
988 Mon Jul 06 13:13:46 CEST 2015 hello/HelloWorld.class

但问题是,我得到了所有图像,只有最后一个图像是可见的。其他我无法打开,只有 1KB

那我做错了什么?

另外我还需要稍后下载png-Files,那么我可以将 $ newname.jpg 更改为 $ newname.png 吗?

在此先感谢,我真的需要快速回答,坐在这里几个小时,试图找出答案。

1 个答案:

答案 0 :(得分:1)

为什么不使用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);
}

您还可以使用stream_set_read_buffer

stream_set_read_buffer($in, 4096);

刚刚用我们的头像照片测试了这个。

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

完美无缺。

调试:阅读远程标头以获取更多信息? $httpresponseheader

var_dump($http_response_header);

stream_get_meta_data

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