解析php多线程下载远程多个文件


Posted in PHP onJune 25, 2013
function remote($urls, $name = '', $path = '', $dir = './images/') {
 if (!is_array($urls) or count($urls) == 0) {
  return false;
 }
 dmkdir($dir);
 $curl = $text = array();
 foreach($urls as $k => $v) {
  if (!empty($v) && preg_match("~^http~i", $v)) {
   $nurl[$k] = trim(str_replace(' ', "%20", $v));
   $curl[$k] = curl_init($nurl[$k]);
   curl_setopt($curl[$k], CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4 );
   curl_setopt($curl[$k], CURLOPT_RETURNTRANSFER, 1);
   curl_setopt($curl[$k], CURLOPT_HEADER, 0);
   curl_setopt($curl[$k], CURLOPT_CONNECTTIMEOUT, 20);
   if(!isset($handle)){
    $handle = curl_multi_init();
   }
   curl_multi_add_handle($handle, $curl[$k]);
  }
  continue ;
 }
 $active = null;
 do{
  $mrc = @curl_multi_exec($handle, $active);
 } while ($mrc == CURLM_CALL_MULTI_PERFORM);
 while ($active && $mrc == CURLM_OK) {
  if (curl_multi_select($handle) != -1) {
   do {
    $mrc = curl_multi_exec($handle, $active);
   } while ($mrc == CURLM_CALL_MULTI_PERFORM);
  }
 }
 foreach ($curl as $k => $v) {
   if (curl_error($curl[$k]) == "") {
    if ($k == 0) {
     $fname[$k] = strtolower($name . '.' . pathinfo($urls[$k], PATHINFO_EXTENSION));
    } else {
     $fname[$k] = strtolower($name . '_' . $k . '.' . pathinfo($urls[$k], PATHINFO_EXTENSION));
    }
    $text[$k] = (string) curl_multi_getcontent($curl[$k]);
    $filedir[$k] = $dir.'/' . $fname[$k];
   if (file_put_contents($filedir[$k], $text[$k])) {
    $filepath[$k] = $path . $fname[$k];
   }
  }
  curl_multi_remove_handle($handle, $curl[$k]);
  curl_close($curl[$k]);
 }
 curl_multi_close($handle);
 return $filepath;
}

PHP 相关文章推荐
php下使用SimpleXML 处理XML 文件
Feb 27 PHP
《PHP编程最快明白》第六讲:Mysql数据库操作
Nov 01 PHP
利用Ffmpeg获得flv视频缩略图和视频时间的代码
Sep 15 PHP
php采集文章中的图片获取替换到本地(实现代码)
Jul 08 PHP
ThinkPHP模板中判断volist循环的最后一条记录的验证方法
Jul 01 PHP
Yii框架获取当前controlle和action对应id的方法
Dec 03 PHP
php检测apache mod_rewrite模块是否安装的方法
Mar 14 PHP
Yii实现的多级联动下拉菜单
Jul 13 PHP
Yii2框架控制器、路由、Url生成操作示例
May 27 PHP
Thinkphp5.0 框架视图view的比较标签用法分析
Oct 12 PHP
yii 框架实现按天,月,年,自定义时间段统计数据的方法分析
Apr 04 PHP
PHP 对象接口简单实现方法示例
Apr 13 PHP
基于php导出到Excel或CSV的详解(附utf8、gbk 编码转换)
Jun 25 #PHP
执行、获取远程代码返回:file_get_contents 超时处理的问题详解
Jun 25 #PHP
PHP 冒泡排序 二分查找 顺序查找 二维数组排序算法函数的详解
Jun 25 #PHP
使用php判断网页是否gzip压缩
Jun 25 #PHP
解析PHP中的file_get_contents获取远程页面乱码的问题
Jun 25 #PHP
深入file_get_contents函数抓取内容失败的原因分析
Jun 25 #PHP
提升PHP性能的21种方法介绍
Jun 25 #PHP
You might like
mac os快速切换多个PHP版本的方法
2017/03/07 PHP
多个Laravel项目如何共用migrations详解
2018/09/25 PHP
滚动条变色 隐藏滚动条与双击网页自动滚屏显示代码
2009/12/28 Javascript
javascript学习笔记(十九) 节点的操作实现代码
2012/06/20 Javascript
jquery判断浏览器类型的代码
2012/11/05 Javascript
Extjs NumberField后面加单位实现思路
2013/07/30 Javascript
js定时调用方法成功后并停止调用示例
2014/04/08 Javascript
javascript清空table表格的方法
2015/05/14 Javascript
javascript实现简易计算器的代码
2016/05/31 Javascript
什么是JavaScript注入攻击?
2016/09/14 Javascript
把JavaScript代码改成ES6语法不完全指南(分享)
2017/09/10 Javascript
vue.js响应式原理解析与实现
2020/06/22 Javascript
node上的redis调用优化示例详解
2018/10/30 Javascript
js canvas实现写字动画效果
2018/11/30 Javascript
vue-cli的build的文件夹下没有dev-server.js文件配置mock数据的方法
2019/04/17 Javascript
JavaScript变量作用域及内存问题实例分析
2019/06/10 Javascript
vue elementUI使用tabs与导航栏联动
2019/06/21 Javascript
python编写网页爬虫脚本并实现APScheduler调度
2014/07/28 Python
Python字符串和文件操作常用函数分析
2015/04/08 Python
利用Python抓取行政区划码的方法
2016/11/28 Python
详细介绍Python进度条tqdm的使用
2019/07/31 Python
Python 实例方法、类方法、静态方法的区别与作用
2019/08/14 Python
Pandas+Matplotlib 箱式图异常值分析示例
2019/12/09 Python
使用tensorflow框架在Colab上跑通猫狗识别代码
2020/04/26 Python
详解python内置模块urllib
2020/09/09 Python
基于Pytorch版yolov5的滑块验证码破解思路详解
2021/02/25 Python
DeinDesign德国:设计自己的手机壳
2019/12/14 全球购物
生产经理的自我评价分享
2013/11/07 职场文书
幼儿园元旦家长感言
2014/02/27 职场文书
幼儿园的门卫岗位职责
2014/04/10 职场文书
停车位租赁协议书
2014/09/24 职场文书
领导走群众路线整改措施思想汇报
2014/10/12 职场文书
2015元旦文艺汇演主持稿(开场白+结束语)
2014/12/14 职场文书
2016年幼儿园万圣节活动总结
2016/04/05 职场文书
导游词之江苏溱潼古镇
2019/11/27 职场文书
《月歌。》宣布制作10周年纪念剧场版《RABBITS KINGDOM THE MOVIE》
2022/04/02 日漫