多线程php多线程批量采集下载图片的实现代码

php多线程  时间:2021-01-31  阅读:()

PHP多线程批量采集下载图片的实现代码

使用curl的多线程另外curl可以设置请求时间遇到很慢的url资源可以果断的放弃这样没有阻塞另外有多线程请求效率应该比较高

*c url多线程

*@param array$array并行网址

*@param int$timeout超时时间

*@return mixpublic function Curl_http($array,$timeout=‘15’){

$res=array();

$mh=c url_mult i_in it();//创建多个c url语柄foreach($array as$k=$url){

$c onn[$k]=c url_init($ur l);//初始化curl_s etopt($c onn[$k],CURLOPT_TIMEO UT, $timeout);//设置超时时间curl_setopt($conn[$k], CURLOPT_USERAGENT, ‘Mozilla/5.0 (compatible;MSIE 5.01;Windows NT 5.0)’);curl_s etopt($c onn[$k],CURLOPT_MAXREDIRS,7);//HTTp定向级别 7最高c url_s etopt($c onn[$k],CURLOPT_HEADER, fals e);//这里不要header加块效率curl_setopt($c onn[$k],CURLOPT_FOLLOWLOCATION, 1); //302 redirectcurl_s etopt($c onn[$k],CURLOPT_RET URNTRANSFER,1);//要求结果为字符串且输出到屏幕上curl_s etopt($c onn[$k],CURLOPT_HTTPGET, true);curl_mult i_add_handle($mh,$c onn[$k]);

//防止死循环耗死cpu这段是根据网上的写法

do {

$mrc=c url_multi_exec($mh,$active);//当无数据 ac tive=true

}while($mrc==CURLM_CALL_MULTI_PERFORM);//当正在接受数据时while($active and$mrc==CURLM_O K) {//当无数据时或请求暂停时 ac tive=trueif(curl_multi_s e lec t($mh) !=-1) {do {

$mrc=c url_multi_exec($mh, $ac tive);

}while($mrc==CURLM_CALL_MULTI_PERFORM);foreach($array as $k=$url) {if(!c url_errno($c onn[$k])){

$data[$k]=c url_multi_g etc ontent($c onn[$k]);//数据转换为array

$header[$k]=c url_getinfo($c onn[$k]);//返回http头信息curl_c los e($c onn[$k]);//关闭语柄curl_multi_remove_handle($mh, $c onn[$k]); //释放资源

}els e{un s et($k,$ur l);curl_mult i_c los e($mh);r eturn$data;

//参数接收

$c allb ac k=$_GET[‘c allb ac k’];

$hr e fs=$_GET[‘hr e fs’];

$urlarray=explo de(‘ , ’,trim($hrefs, ’, ’));

$date=date(‘Ymd’ ,time(png|PNG|JPG|gif))\\2/i ,$v,$matches[$k]);if(c ount($matches[$k][3])0){

$dataimg=$img-Cur l_http($m atc he s[$k][3],’20’);//全部图片数据二进制$j=0;foreach((array)$dataimg as$kk=$vv){if($vv!=‘‘){

$rand=rand(1000,9999);

$bas ename=time()._.$rand. . .jpg;//保存为jpg格式的文件

$fname=‘./img/’ .$date. / . $basenamefile_put_c ontents($fname,$vv);

$j++;echo创建第.$j.张图片. $fname.br/

}els e{un s et($kk,$vv);

}els e{unset($matches);

$etime=$img-getMic rotime();//结束时间echo用时.($etime-$stime).秒exit;

BeerVM1GB内存/VDSps端口1GB,350元/月

beervm是一家国人商家,主要提供国内KVM VPS,有河南移动、广州移动等。现在预售湖南长沙联通vds,性价比高。湖南长沙vps(长沙vds),1GB内存/7GB SSD空间/10TB流量/1Gbps端口/独立IP/KVM,350元/月,有需要的可以关注一下。Beervm长沙联通vps套餐:长沙联通1G青春版(预售)长沙联通3G标准版(预售)长沙联通3G(预售)vCPU:1vCPU:2vCPU...

A2Hosting三年付$1.99/月,庆祝18周年/WordPress共享主机最高优惠81%/100GB SSD空间/无限流量

A2Hosting主机,A2Hosting怎么样?A2Hosting是UK2集团下属公司,成立于2003年的老牌国外主机商,产品包括虚拟主机、VPS和独立服务器等,数据中心提供包括美国、新加坡softlayer和荷兰三个地区机房。A2Hosting在国外是一家非常大非常有名气的终合型主机商,拥有几百万的客户,非常值得信赖,国外主机论坛对它家的虚拟主机评价非常不错,当前,A2Hosting主机庆祝1...

atcloud:480G超高防御VPS低至$4/月,美国/新加坡等6机房,512m内存/1核/500g硬盘/不限流量

atcloud主要提供常规cloud(VPS)和storage(大硬盘存储)系列VPS,其数据中心分布在美国(俄勒冈、弗吉尼亚)、加拿大、英国、法国、德国、新加坡,所有VPS默认提供480Gbps的超高DDoS防御+不限流量,杜绝DDoS攻击骚扰,比较适合海外建站等相关业务。ATCLOUD.NET是一家成立于2020年的海外主机商,主要提供KVM架构的VPS产品、LXC容器化产品、权威DNS智能解...

php多线程为你推荐
闪迪和金士顿哪个好闪迪和金士顿哪个好压缩软件哪个好压缩软件用哪个会比较好用手机管家哪个好手机管理软件哪个好用看书软件哪个好推荐几个好用的手机看书软件腾讯空间登录腾讯qq空间进入登陆个人QQ空间qq空间登录不了为什么我的QQ登陆不了QQ空间qq网盘在哪里qq网盘在哪里dns服务器未响应DNS服务器未响应是什么360云u盘360云u盘无法连接怎么回事?360云盘共享群360网盘怎样进共享群?
已备案域名 合租服务器 域名服务器是什么 互联网域名管理办法 淘宝抢红包攻略 韩国空间 59.99美元 宁波服务器 爱奇艺vip免费试用7天 hktv 七夕快乐英语 联通网站 河南移动梦网 韩国代理ip 免费个人网页 godaddy空间 双11促销 碳云 accountsuspended ipower 更多