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 错误
1
ji4ozhu 2017-02-17 03:03:36 +08:00
目标服务器 WEBSERVICE 短暂挂了
|
3
CEBBCAT 2017-02-17 03:31:41 +08:00 via Android 1
|
4
msg7086 2017-02-17 03:33:34 +08:00
给对方的站长打个电话,告诉他网站被你搞挂了,让他赶紧起来修服务器。
|
5
william23 2017-02-17 07:32:21 +08:00 via iPhone
#3 说的对,以前我在公司也有相同的案例,我也是不停地去拿数据,但是对方服务器是做了限制的,因为都是自己公司,好沟通,后来还是要让我这里做改动,让你这里每下载到一定的量就歇一歇,或者就是每过一段时间歇一歇,我当时是选择前者的,虽然我不是下载图片。。
|
6
hellommd 2017-02-17 08:11:01 +08:00 via iPhone
楼主的代码,异常情况都不考虑一下?
建议加入重试机制,异常捕抓。 |
7
dsg001 2017-02-17 08:21:31 +08:00
如果没有其他需求, php 保存图片列表,然后用 wget 下载
|
8
my101du 2017-02-17 08:34:14 +08:00
请继续等待。
最近我正好在搞这个东西,下载 1200 多张图片, Nginx 已经报 502 还是 504 了。但是观察文件夹,文件还在继续增加。可能是因为我设置了 php-fpm 的运行终止 timeout=0 |
10
grey5659 OP @my101du 每次浏览器中断报 500 错误的时候确实服务器挂掉了一样(应用无法访问),要在服务器的 tomcat 命令行窗口随便按一下键盘才会恢复……不知道是怎么回事
|
11
misaka20038numbe 2017-02-17 08:43:28 +08:00
如果是我来做的话,我会将文件名和状态写入一张数据表,然后 php 依次读取状态为未完成的文件。脚本下载成功则修改状态,直到所有文件状态为完成则结束,且成功下载一次就刷新脚本页面一次防止脚本执行超时。
|
12
techmoe 2017-02-17 21:07:01 +08:00
**告诉我哪里报 500 了**
如果是被抓取的 URL 返回 500 那无可或非是对方那边出的问题 但如果你是在浏览器中跑这个脚本浏览器返回 500 那只能说明是这个脚本运行报错了 诸如抓取过程中内存爆炸,或者 IO 错误,都有可能造成致命错误,如果是在浏览器里就肯定会直接返回 500 了 需要强调的一点是,对于抓取这种耗时长的操作,**尽量使用 CLI 模式运行脚本**(说白了就是在命令行下`php script.php`这样直接执行脚本而不是通过浏览器) 同时建议`error_reporting(E_ALL)` |