解析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 相关文章推荐
第十一节--重载
Nov 16 PHP
PHP面向对象概念
Nov 06 PHP
PHP中文件缓存转内存缓存的方法
Dec 06 PHP
PHP实现指定字段的多维数组排序函数分享
Mar 09 PHP
PHP随手笔记整理之PHP脚本和JAVA连接mysql数据库
Nov 25 PHP
WordPress中访客登陆实现邮件提醒的PHP脚本实例分享
Dec 14 PHP
PHP二维数组排序简单实现方法
Feb 14 PHP
PHP用FTP类上传文件视频等的简单实现方法
Sep 23 PHP
php实现的三个常用加密解密功能函数示例
Nov 06 PHP
java解析json方法总结
May 16 PHP
php写app用的框架整理
Sep 29 PHP
php实现根据身份证获取精准年龄
Feb 26 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
利用discuz自带通行证整合dedecms的方法以及文件下载
2007/03/06 PHP
php实现按照权重随机排序数据的方法
2015/01/09 PHP
jQuery编写widget的一些技巧分享
2010/10/28 Javascript
js+html5绘制图片到canvas的方法
2015/06/05 Javascript
JavaScript中日期的相关操作方法总结
2015/10/24 Javascript
jQuery中事件与动画的总结分享
2016/05/24 Javascript
jQuery解决input元素的blur事件和其他非表单元素的click事件冲突问题
2016/08/15 Javascript
Vue异步组件使用详解
2017/04/08 Javascript
微信小程序 空白页重定向解决办法
2017/06/27 Javascript
详解angularJS自定义指令间的相互交互
2017/07/05 Javascript
JS实现websocket长轮询实时消息提示的效果
2017/10/10 Javascript
利用nginx + node在阿里云部署https的步骤详解
2017/12/19 Javascript
vue实现样式之间的切换及vue动态样式的实现方法
2017/12/19 Javascript
Vue2.0 $set()的正确使用详解
2020/07/28 Javascript
vue 单页应用和多页应用的优劣
2020/10/22 Javascript
让python的Cookie.py模块支持冒号做key的方法
2010/12/28 Python
python读取html中指定元素生成excle文件示例
2014/04/03 Python
使用httplib模块来制作Python下HTTP客户端的方法
2015/06/19 Python
python文件操作相关知识点总结整理
2016/02/22 Python
python爬取酷狗音乐排行榜
2019/02/20 Python
pytorch 共享参数的示例
2019/08/17 Python
python3 求约数的实例
2019/12/05 Python
HTML5对手机页面长按会粘贴复制禁用的解决方法
2016/07/19 HTML / CSS
加拿大领先的牛仔零售商:Bluenotes
2018/01/22 全球购物
出纳岗位职责模板
2013/11/27 职场文书
《小白兔和小灰兔》教学反思
2014/02/18 职场文书
2014年最新学习全国两会精神心得
2014/03/17 职场文书
加入学生会演讲稿
2014/04/24 职场文书
村居抓节水倡议书
2014/05/19 职场文书
放飞梦想演讲稿800字
2014/08/26 职场文书
健康状况证明模板
2014/10/23 职场文书
12.4全国法制宣传日活动方案
2014/11/02 职场文书
在校生证明
2015/06/17 职场文书
2019新员工试用期转正申请书3篇
2019/08/13 职场文书
为什么 Nginx 比 Apache 更牛逼
2021/03/31 Servers
最新最全的手机号验证正则表达式
2022/02/24 Javascript