解析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 相关文章推荐
PHP5.0正式发布 不完全兼容PHP4 新增多项功能
Oct 09 PHP
php学习 函数 课件
Jun 15 PHP
php的$_FILES的临时储存文件与回收机制实测过程
Jul 12 PHP
php实现12306余票查询、价格查询示例
Apr 17 PHP
Thinkphp关闭缓存的方法
Jun 26 PHP
PHP版QQ互联OAuth示例代码分享
Jul 05 PHP
php实现网站留言板功能
Nov 04 PHP
php实现的操作excel类详解
Jan 15 PHP
Symfony2函数用法实例分析
Mar 18 PHP
详解WordPress中添加友情链接的方法
May 21 PHP
Laravel中使用FormRequest进行表单验证方法及问题汇总
Jun 19 PHP
ThinkPHP实现登录退出功能
Jun 29 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
古巴咖啡 Cubita琥爵咖啡 独特的加勒比海风味咖啡
2021/03/06 新手入门
php基础知识:类与对象(2) 自动加载对象
2006/12/13 PHP
实现dedecms全站URL静态化改造的代码
2007/03/29 PHP
如何给phpcms v9增加类似于phpcms 2008中的关键词表
2013/07/01 PHP
PHP运行SVN命令显示某用户的文件更新记录的代码
2014/01/03 PHP
php用ini_get获取php.ini里变量值的方法
2015/03/04 PHP
google 搜索框添加关键字实现代码
2010/04/24 Javascript
两种方法实现文本框输入内容提示消失
2013/03/17 Javascript
Extjs4中的分页应用结合前后台
2013/12/13 Javascript
jquery UI Datepicker时间控件的使用方法(基础版)
2015/11/07 Javascript
js实现瀑布流的三种方式比较
2020/06/28 Javascript
简单的JS时钟实例讲解
2016/01/13 Javascript
dedecms页面如何获取会员状态的实例代码
2016/03/15 Javascript
jquery自适应布局的简单实例
2016/05/28 Javascript
详解react-webpack2-热模块替换[HMR]
2017/08/03 Javascript
Angularjs 手写日历的实现代码(不用插件)
2017/10/18 Javascript
JavaScript刷新页面的几种方法总结
2019/03/28 Javascript
微信小程序中target和currentTarget的区别小结
2020/11/06 Javascript
Python检测字符串中是否包含某字符集合中的字符
2015/05/21 Python
Python 实现递归法解决迷宫问题的示例代码
2020/01/12 Python
Python3中FuzzyWuzzy库实例用法
2020/11/18 Python
python绘制雷达图实例讲解
2021/01/03 Python
可以随进度显示不同颜色的css3进度条分享
2014/04/11 HTML / CSS
利用HTML5+CSS3实现3D转换效果实例详解
2017/05/02 HTML / CSS
解决H5的a标签的download属性下载service上的文件出现跨域问题
2019/07/16 HTML / CSS
html5教程调用绘图api画简单的圆形代码分享
2013/12/04 HTML / CSS
英国最大的邮寄种子和植物公司:Thompson & Morgan
2017/09/21 全球购物
优秀的计算机专业求职信范文
2013/12/27 职场文书
2014年两会学习心得体会
2014/03/10 职场文书
党员岗位承诺口号大全
2014/03/28 职场文书
《小动物过冬》教学反思
2014/04/17 职场文书
机械专业技术员求职信
2014/06/14 职场文书
4S店收银员岗位职责
2015/04/07 职场文书
小平小道观后感
2015/06/09 职场文书
详解Redis集群搭建的三种方式
2021/05/31 Redis
SQL注入详解及防范方法
2021/12/06 MySQL