解析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 相关文章推荐
在apache下限制每个虚拟主机的并发数!!!!
Oct 09 PHP
无数据库的详细域名查询程序PHP版(4)
Oct 09 PHP
php保存二进制原始数据为图片的程序代码
Oct 14 PHP
php实现阿拉伯数字和罗马数字相互转换的方法
Apr 17 PHP
php cookie 详解使用实例
Nov 03 PHP
深入了解PHP中的Array数组和foreach
Nov 06 PHP
PHP会话控制实例分析
Dec 24 PHP
PHP简单留言本功能实现代码
Jun 09 PHP
YII框架页面缓存操作示例
Apr 29 PHP
php输出反斜杠的实例方法
Sep 19 PHP
PHP设计模式之外观模式(Facade)入门与应用详解
Dec 13 PHP
thinkphp5框架路由原理与用法详解
Feb 11 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
水质对咖图啡风味的影响具体有哪些
2021/03/03 冲泡冲煮
php数据库密码的找回的步骤
2011/01/12 PHP
PHP错误Warning:mysql_query()解决方法
2015/10/24 PHP
JS日历 推荐
2006/12/03 Javascript
几个常用的JavaScript字符串处理函数 - split()、join()、substring()和indexOf()
2009/06/02 Javascript
JavaScript 封装Ajax传递的数据代码
2009/06/05 Javascript
JavaScript中的prototype使用说明
2010/04/13 Javascript
jQuery实现的多屏图像图层切换效果实例
2015/05/07 Javascript
JavaScript正则表达式匹配 div  style标签
2016/03/15 Javascript
Vue.js实现一个自定义分页组件vue-paginaiton
2016/09/05 Javascript
Angular 理解module和injector,即依赖注入
2016/09/07 Javascript
将html页面保存成图片,图片写入pdf的实现方法(推荐)
2016/09/17 Javascript
详解jQuery的Cookie插件
2016/11/23 Javascript
Jquery+Ajax+xml实现中国地区选择三级联动菜单效果(推荐)
2017/06/09 jQuery
深入浅析Node环境和浏览器的区别
2018/08/14 Javascript
解决vuejs项目里css引用背景图片不能显示的问题
2018/09/13 Javascript
用vuex写了一个购物车H5页面的示例代码
2018/12/04 Javascript
vue data引入本地图片的两种方式小结
2019/11/13 Javascript
javascript实现左右缓动动画函数
2020/11/25 Javascript
Python处理RSS、ATOM模块FEEDPARSER介绍
2015/02/18 Python
python字符串编码识别模块chardet简单应用
2015/06/15 Python
利用python编写一个图片主色转换的脚本
2017/12/07 Python
Python: 传递列表副本方式
2019/12/19 Python
python opencv 检测移动物体并截图保存实例
2020/03/10 Python
德国汉莎航空中国官网: Lufthansa中国
2017/03/30 全球购物
泰国折扣酒店预订:Hotels2Thailand
2018/03/20 全球购物
Roxy俄罗斯官方网站:冲浪和滑雪板的一切
2020/06/20 全球购物
中专生自我鉴定范文
2014/02/02 职场文书
设计师求职信
2014/07/01 职场文书
初中优秀学生评语
2014/12/29 职场文书
复兴之路纪录片观后感
2015/06/02 职场文书
2019同学聚会主持词
2019/05/06 职场文书
2019新学期家长会工作计划
2019/08/21 职场文书
MySQL Innodb索引机制详细介绍
2021/11/23 MySQL
SQL语法CONSTRAINT约束操作详情
2022/01/18 MySQL
「睡美人」爱洛公主粘土人开订
2022/03/22 日漫