/**

* 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多线程批量采集下载图片的实现代码相关推荐

  1. 在线编辑视频、去重消重去水印视频深度处理什么视频批量采集下载软件好?在什么网站下载好?...

    在线编辑视频.去重消重去水印 视频深度处理 什么视频批量采集下载软件好?在什么网站下载好? 有视频批量采集下载软件吗?在哪里下载安全? 好的视频去重消重去水印软件与视频下载软件 对视频进行深度处理的软 ...

  2. 抖音短视频批量采集下载软件哪些好?如何下载?轻松搬运视频,快速批量处理水印去除LOGO!...

    抖音短视频批量采集下载软件哪些好?如何下载? 抖音短视频去重消重去水印软件哪些好?如何下载? 腾讯视频批量采集下载软件哪些好?怎么下载? 腾讯视频去重消重去水印软件哪些好?如何下载? 轻松搬运视频,快 ...

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

    PHP多线程批量采集下载图片 博客分类: PHP 使用curl的多线程,另外curl可以设置请求时间,遇到很慢的url资源,可以果断的放弃,这样没有阻塞,另外有多线程请求,效率应该比较高,参考:< ...

  4. vue下载大文件时浏览器不显示下载进度

    vue下载大文件时浏览器不显示下载进度 问题描述 最近开发中遇到个问题,项目需要下载大文件(音视频),由于后端给我的是视频的地址而不是直接返回流,所以前端用了XMLHttpRequest获取视频流并实 ...

  5. 统计APP下载量--发现安卓下载大文件使用多线程下载方式

    问题产生 在项目开发过程中,会有各种各样的需求. 而在需求开发过程中,我们常常会遇到从没有见过的问题,这就需要我们一步一步排查. 在一次版本需求中,需要统计不同渠道APP的下载量. 理想很丰满,现实很 ...

  6. vue实现前台生成word并下载,并且可实现批量打包下载

    一.引用场景: 前面的一个项目里面有一个申报表,后台收集的申报表需要批量导出,一开始我是用到的C#的WordOpApControlle,但是这种方法存在一个难以解决的问题.就是当你导出的这个word模 ...

  7. php批量采集电视剧,如何通过PHP多线程批量采集下载远程网站图片代码实例

    /** * curl 多线程 * @author http://www.lai18.com * @param array $array 并行网址 * @param int $timeout 超时时间 ...

  8. 前嗅教你大数据:批量采集/下载网页中的图片数据

    l 采集网站 [场景描述]采集revisionvillage网页中所有真题图片的数据. [源网站介绍]revisionvillage,国外知名IB真题网站,每道题都有视频讲解的IB数学刷题网站. [使 ...

  9. 【加水印】如何批量加文字水印和图片水印,如何批量添加文件名水印到图片里?图片的名称批量写到图片上面?

    本文所涉及的软件下载 CSDN尊贵下载:https://download.csdn.net/download/binbin321/19097204 百度网盘下载地址:https://pan.baidu ...

最新文章

  1. 快手王华彦:端上视觉技术的极致效率及其短视频应用实践 | AI ProCon 2019
  2. prometheus连续查询_Prometheus查询
  3. LeetCode:146_LRU cache | LRU缓存设计 | Hard
  4. python 内置模块 增加_模块的内置方法--Python提高班
  5. addcslashes php 有什么用处,PHP addcslashes函数有什么用
  6. BZOJ 3731: Gty的超级妹子树
  7. gin ajax 获取请求参数,go的gin框架从请求中获取参数的方法
  8. android xml文件格式,android xml 资源文件中几个格式(@ ? @* @+)的含义
  9. 閱讀10大優點:為什麼你應該每天閱讀
  10. WZ132源代码行侠仗义
  11. todo项目开发_Facebook的TODO项目,巴西的Coursera,Drupal等
  12. 洛谷 P2167 [SDOI2009]Bill的挑战
  13. Linux 中的旧扣簧键盘(Bucklespring 键盘)声音
  14. 如何在 Apple TV 上获得电影推荐?
  15. nginx 查看当前的连接数
  16. UWA学堂|逻辑代码模块
  17. 几何学在计算机中应用,分形几何在计算机图形学中的应用
  18. 学习笔记(2):Google开发专家带你入门神经网络-深度学习“四件套”:数据、模型、损失函数与优化器
  19. 地理信息安全在线培训考试系统题库-单选题
  20. Android UI美化——颜色

热门文章

  1. 调研分析:全球与中国汽车内室照明模组市场现状及未来发展趋势
  2. 三只小猪称体重有三只小猪ABC,请分别输入三只小猪的体重,并且判断哪只小猪最重?用条件if嵌套法和三目运算符法
  3. 记一次:java获取真实ip地址问题
  4. 怎样删除office2019拥有多个都需要激活的授权信息?
  5. 【技术分享】无线通信LoRa扩频技术
  6. SO3,SE3,旋转,欧拉角与四元数笔记
  7. 2022最新独立版智狐聚合支付系统源码Ver1.0.5.21版
  8. 线代[2]|对极易混淆概念的梳理—线性相关与线性无关、极大线性无关部分组与秩与基础解系、向量空间的基与维数
  9. 用C语言栈实现进制转换
  10. html页面forEach用法,jQuery教程之使用模板动态添加html元素,相当于jstl里的foreach...