我有一个文件,我逐行读取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 吗?
在此先感谢,我真的需要快速回答,坐在这里几个小时,试图找出答案。
答案 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);
var_dump(stream_get_meta_data($in), stream_get_meta_data($out));