php 多线程下载大图片,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多线程批量采集下载图片的实现代码相关推荐
- 在线编辑视频、去重消重去水印视频深度处理什么视频批量采集下载软件好?在什么网站下载好?...
在线编辑视频.去重消重去水印 视频深度处理 什么视频批量采集下载软件好?在什么网站下载好? 有视频批量采集下载软件吗?在哪里下载安全? 好的视频去重消重去水印软件与视频下载软件 对视频进行深度处理的软 ...
- 抖音短视频批量采集下载软件哪些好?如何下载?轻松搬运视频,快速批量处理水印去除LOGO!...
抖音短视频批量采集下载软件哪些好?如何下载? 抖音短视频去重消重去水印软件哪些好?如何下载? 腾讯视频批量采集下载软件哪些好?怎么下载? 腾讯视频去重消重去水印软件哪些好?如何下载? 轻松搬运视频,快 ...
- PHP多线程批量采集下载图片
PHP多线程批量采集下载图片 博客分类: PHP 使用curl的多线程,另外curl可以设置请求时间,遇到很慢的url资源,可以果断的放弃,这样没有阻塞,另外有多线程请求,效率应该比较高,参考:< ...
- vue下载大文件时浏览器不显示下载进度
vue下载大文件时浏览器不显示下载进度 问题描述 最近开发中遇到个问题,项目需要下载大文件(音视频),由于后端给我的是视频的地址而不是直接返回流,所以前端用了XMLHttpRequest获取视频流并实 ...
- 统计APP下载量--发现安卓下载大文件使用多线程下载方式
问题产生 在项目开发过程中,会有各种各样的需求. 而在需求开发过程中,我们常常会遇到从没有见过的问题,这就需要我们一步一步排查. 在一次版本需求中,需要统计不同渠道APP的下载量. 理想很丰满,现实很 ...
- vue实现前台生成word并下载,并且可实现批量打包下载
一.引用场景: 前面的一个项目里面有一个申报表,后台收集的申报表需要批量导出,一开始我是用到的C#的WordOpApControlle,但是这种方法存在一个难以解决的问题.就是当你导出的这个word模 ...
- php批量采集电视剧,如何通过PHP多线程批量采集下载远程网站图片代码实例
/** * curl 多线程 * @author http://www.lai18.com * @param array $array 并行网址 * @param int $timeout 超时时间 ...
- 前嗅教你大数据:批量采集/下载网页中的图片数据
l 采集网站 [场景描述]采集revisionvillage网页中所有真题图片的数据. [源网站介绍]revisionvillage,国外知名IB真题网站,每道题都有视频讲解的IB数学刷题网站. [使 ...
- 【加水印】如何批量加文字水印和图片水印,如何批量添加文件名水印到图片里?图片的名称批量写到图片上面?
本文所涉及的软件下载 CSDN尊贵下载:https://download.csdn.net/download/binbin321/19097204 百度网盘下载地址:https://pan.baidu ...
最新文章
- 快手王华彦:端上视觉技术的极致效率及其短视频应用实践 | AI ProCon 2019
- prometheus连续查询_Prometheus查询
- LeetCode:146_LRU cache | LRU缓存设计 | Hard
- python 内置模块 增加_模块的内置方法--Python提高班
- addcslashes php 有什么用处,PHP addcslashes函数有什么用
- BZOJ 3731: Gty的超级妹子树
- gin ajax 获取请求参数,go的gin框架从请求中获取参数的方法
- android xml文件格式,android xml 资源文件中几个格式(@ ? @* @+)的含义
- 閱讀10大優點:為什麼你應該每天閱讀
- WZ132源代码行侠仗义
- todo项目开发_Facebook的TODO项目,巴西的Coursera,Drupal等
- 洛谷 P2167 [SDOI2009]Bill的挑战
- Linux 中的旧扣簧键盘(Bucklespring 键盘)声音
- 如何在 Apple TV 上获得电影推荐?
- nginx 查看当前的连接数
- UWA学堂|逻辑代码模块
- 几何学在计算机中应用,分形几何在计算机图形学中的应用
- 学习笔记(2):Google开发专家带你入门神经网络-深度学习“四件套”:数据、模型、损失函数与优化器
- 地理信息安全在线培训考试系统题库-单选题
- Android UI美化——颜色
热门文章
- 调研分析:全球与中国汽车内室照明模组市场现状及未来发展趋势
- 三只小猪称体重有三只小猪ABC,请分别输入三只小猪的体重,并且判断哪只小猪最重?用条件if嵌套法和三目运算符法
- 记一次:java获取真实ip地址问题
- 怎样删除office2019拥有多个都需要激活的授权信息?
- 【技术分享】无线通信LoRa扩频技术
- SO3,SE3,旋转,欧拉角与四元数笔记
- 2022最新独立版智狐聚合支付系统源码Ver1.0.5.21版
- 线代[2]|对极易混淆概念的梳理—线性相关与线性无关、极大线性无关部分组与秩与基础解系、向量空间的基与维数
- 用C语言栈实现进制转换
- html页面forEach用法,jQuery教程之使用模板动态添加html元素,相当于jstl里的foreach...