0

0

PHP多线程批量采集上载图片

php中文网

php中文网

发布时间:2016-06-13 10:38:43

|

1347人浏览过

|

来源于php中文网

原创

PHP多线程批量采集下载图片

?

立即学习PHP免费学习笔记(深入)”;

小邮包 包月订购包年程序
小邮包 包月订购包年程序

小邮包-包月订购包年服务网,该程序由好买卖商城开发,程序采用PHP+MYSQL架设,程序商业模式为目前最为火爆的包月订制包年服务模式,这种包年订购在国外网站已经热火很多年了,并且已经发展到一定规模,像英国的男士用品网站BlackSocks,一年的袜子购买量更是达到了1000万双。功能:1、实现多产品上线,2、不用注册也可以直接下单购买,3、集成目前主流支付接口,4、下单发货均有邮件提醒。

下载

使用curl的多线程,另外curl可以设置请求时间,遇到很慢的url资源,可以果断的放弃,这样没有阻塞,另外有多线程请求,效率应该比较高,参考:《CURL的学习和应用[附多线程]》,我们再来测试一下;

核心代码:

?

立即学习PHP免费学习笔记(深入)”;

/**     * curl 多线程     *     * @param array $array 并行网址     * @param int $timeout 超时时间     * @return mix     */	public function Curl_http($array,$timeout='15'){		    $res = array();		    $mh = curl_multi_init();//创建多个curl语柄		    foreach($array as $k=>$url){		        $conn[$k]=curl_init($url);//初始化		        curl_setopt($conn[$k], CURLOPT_TIMEOUT, $timeout);//设置超时时间		        curl_setopt($conn[$k], CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');		        curl_setopt($conn[$k], CURLOPT_MAXREDIRS, 7);//HTTp定向级别 ,7最高		        curl_setopt($conn[$k], CURLOPT_HEADER, false);//这里不要header,加块效率		        curl_setopt($conn[$k], CURLOPT_FOLLOWLOCATION, 1); // 302 redirect		        curl_setopt($conn[$k], CURLOPT_RETURNTRANSFER,1);//要求结果为字符串且输出到屏幕上				curl_setopt($conn[$k], CURLOPT_HTTPGET, true);		        curl_multi_add_handle ($mh,$conn[$k]);		    }		     //防止死循环耗死cpu 这段是根据网上的写法		        do {		            $mrc = curl_multi_exec($mh,$active);//当无数据,active=true		        } while ($mrc == CURLM_CALL_MULTI_PERFORM);//当正在接受数据时		        while ($active and $mrc == CURLM_OK) {//当无数据时或请求暂停时,active=true		            if (curl_multi_select($mh) != -1) {		                do {		                    $mrc = curl_multi_exec($mh, $active);		                } while ($mrc == CURLM_CALL_MULTI_PERFORM);		            }		        }		    foreach ($array as $k => $url) {		          if(!curl_errno($conn[$k])){		          	$data[$k]=curl_multi_getcontent($conn[$k]);//数据转换为array		          	$header[$k]=curl_getinfo($conn[$k]);//返回http头信息		          	curl_close($conn[$k]);//关闭语柄		          	curl_multi_remove_handle($mh  , $conn[$k]);   //释放资源		          }else{		          	unset($k,$url);		          }		        }		        curl_multi_close($mh);		        return $data;		 }//参数接收$callback = $_GET['callback'];$hrefs = $_GET['hrefs'];$urlarray = explode(',',trim($hrefs,','));$date = date('Ymd',time());//实例化$img = new HttpImg();$stime = $img->getMicrotime();//开始时间$data = $img->Curl_http($urlarray,'20');//列表数据mkdir('./img/'.$date,0777);foreach ((array)$data as $k=>$v){	preg_match_all("/(href|src)=([\"|']?)([^ \"'>]+\.(jpg|png|PNG|JPG|gif))\\2/i", $v, $matches[$k]);	if(count($matches[$k][3])>0){		$dataimg = $img->Curl_http($matches[$k][3],'20');//全部图片数据二进制		$j = 0;		foreach ((array)$dataimg as $kk=>$vv){			if($vv !=''){				$rand = rand(1000,9999);				$basename = time()."_".$rand.".".jpg;//保存为jpg格式的文件				$fname = './img/'.$date."/"."$basename";				file_put_contents($fname, $vv);				$j++;				echo "创建第".$j."张图片"."$fname"."
"; }else{ unset($kk,$vv); } } }else{ unset($matches); }}$etime = $img->getMicrotime();//结束时间echo "用时".($etime-$stime)."秒";exit;

?

立即学习PHP免费学习笔记(深入)”;

?

立即学习PHP免费学习笔记(深入)”;

测试一下效果

337张图片用时260秒左右,基本上可以做到一秒内就可以采集一张的效果,而且发现图片越到优势采集速度越明显。

image我们可以看一下文件命名:也就可以做到同一时刻可以生成10张图片,

由于采用了20秒请求的时间限制,有些图片生成后有明显不全,也就是图片资源在20秒内未能完全采集,这个时间大家可以自行设置。

?

立即学习PHP免费学习笔记(深入)”;

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
Java 桌面应用开发(JavaFX 实战)
Java 桌面应用开发(JavaFX 实战)

本专题系统讲解 Java 在桌面应用开发领域的实战应用,重点围绕 JavaFX 框架,涵盖界面布局、控件使用、事件处理、FXML、样式美化(CSS)、多线程与UI响应优化,以及桌面应用的打包与发布。通过完整示例项目,帮助学习者掌握 使用 Java 构建现代化、跨平台桌面应用程序的核心能力。

36

2026.01.14

php与html混编教程大全
php与html混编教程大全

本专题整合了php和html混编相关教程,阅读专题下面的文章了解更多详细内容。

18

2026.01.13

PHP 高性能
PHP 高性能

本专题整合了PHP高性能相关教程大全,阅读专题下面的文章了解更多详细内容。

34

2026.01.13

MySQL数据库报错常见问题及解决方法大全
MySQL数据库报错常见问题及解决方法大全

本专题整合了MySQL数据库报错常见问题及解决方法,阅读专题下面的文章了解更多详细内容。

19

2026.01.13

PHP 文件上传
PHP 文件上传

本专题整合了PHP实现文件上传相关教程,阅读专题下面的文章了解更多详细内容。

16

2026.01.13

PHP缓存策略教程大全
PHP缓存策略教程大全

本专题整合了PHP缓存相关教程,阅读专题下面的文章了解更多详细内容。

6

2026.01.13

jQuery 正则表达式相关教程
jQuery 正则表达式相关教程

本专题整合了jQuery正则表达式相关教程大全,阅读专题下面的文章了解更多详细内容。

3

2026.01.13

交互式图表和动态图表教程汇总
交互式图表和动态图表教程汇总

本专题整合了交互式图表和动态图表的相关内容,阅读专题下面的文章了解更多详细内容。

45

2026.01.13

nginx配置文件详细教程
nginx配置文件详细教程

本专题整合了nginx配置文件相关教程详细汇总,阅读专题下面的文章了解更多详细内容。

5

2026.01.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP使用CURL抓取页面
PHP使用CURL抓取页面

共4课时 | 2.9万人学习

前端最全HTTP基础原理及应用
前端最全HTTP基础原理及应用

共12课时 | 1.7万人学习

Scala教程
Scala教程

共24课时 | 11.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号