PHP 批量下载图片总是中途断开?

2017-02-17 02:53:26 +08:00
 grey5659
set_time_limit(0);
//省略代码
$path="照片";
while($row = $query->fetch()) {
    $image_arr.=$row[1].$row[2];
}
$image_array=explode(',',$image_arr);//获得一个数组,类似('a00001','a00002')

foreach($image_array as $v){
    $image=file_get_contents("http://111.11.11.111:80/IMG_".$v."_2122.jpg");//拼接图片地址
    file_put_contents(iconv("UTF-8", "GBK", $path."/".$v.".jpg"),$image);//下载图片

}

一共大概有 2000 张图片,为什么总是到中途(三四百张)就会中断了,报 500 错误

3031 次点击
所在节点    PHP
12 条回复
ji4ozhu
2017-02-17 03:03:36 +08:00
目标服务器 WEBSERVICE 短暂挂了
grey5659
2017-02-17 03:04:49 +08:00
@ji4ozhu 请问怎么解决呢
CEBBCAT
2017-02-17 03:31:41 +08:00
@grey5659 要是是按照 @ji4ozhu 的说法,那应该让程序歇一歇,等对方服务器恢复正常再开始抓取图片。另外,您一件事情发三个帖子是不是不太好?
msg7086
2017-02-17 03:33:34 +08:00
给对方的站长打个电话,告诉他网站被你搞挂了,让他赶紧起来修服务器。
william23
2017-02-17 07:32:21 +08:00
#3 说的对,以前我在公司也有相同的案例,我也是不停地去拿数据,但是对方服务器是做了限制的,因为都是自己公司,好沟通,后来还是要让我这里做改动,让你这里每下载到一定的量就歇一歇,或者就是每过一段时间歇一歇,我当时是选择前者的,虽然我不是下载图片。。
hellommd
2017-02-17 08:11:01 +08:00
楼主的代码,异常情况都不考虑一下?

建议加入重试机制,异常捕抓。
dsg001
2017-02-17 08:21:31 +08:00
如果没有其他需求, php 保存图片列表,然后用 wget 下载
my101du
2017-02-17 08:34:14 +08:00
请继续等待。
最近我正好在搞这个东西,下载 1200 多张图片, Nginx 已经报 502 还是 504 了。但是观察文件夹,文件还在继续增加。可能是因为我设置了 php-fpm 的运行终止 timeout=0
grey5659
2017-02-17 08:34:29 +08:00
@CEBBCAT 好像是卡了,记得没点提交多次……想删也删不掉……
grey5659
2017-02-17 08:41:49 +08:00
@my101du 每次浏览器中断报 500 错误的时候确实服务器挂掉了一样(应用无法访问),要在服务器的 tomcat 命令行窗口随便按一下键盘才会恢复……不知道是怎么回事
misaka20038numbe
2017-02-17 08:43:28 +08:00
如果是我来做的话,我会将文件名和状态写入一张数据表,然后 php 依次读取状态为未完成的文件。脚本下载成功则修改状态,直到所有文件状态为完成则结束,且成功下载一次就刷新脚本页面一次防止脚本执行超时。
techmoe
2017-02-17 21:07:01 +08:00
**告诉我哪里报 500 了**
如果是被抓取的 URL 返回 500 那无可或非是对方那边出的问题
但如果你是在浏览器中跑这个脚本浏览器返回 500 那只能说明是这个脚本运行报错了
诸如抓取过程中内存爆炸,或者 IO 错误,都有可能造成致命错误,如果是在浏览器里就肯定会直接返回 500 了
需要强调的一点是,对于抓取这种耗时长的操作,**尽量使用 CLI 模式运行脚本**(说白了就是在命令行下`php script.php`这样直接执行脚本而不是通过浏览器)
同时建议`error_reporting(E_ALL)`

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/341058

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX