解析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 服务器配置(使用Apache及IIS两种方法)
Jun 01 PHP
PHP获取表单textarea数据中的换行问题
Sep 10 PHP
探讨PHP中this,self,parent的区别详解
Jun 08 PHP
Drupal简体中文语言包安装教程
Sep 27 PHP
php获取网页上所有链接的方法
Apr 03 PHP
PHP抓取网页、解析HTML常用的方法总结
Jul 01 PHP
PHP模板解析类实例
Jul 09 PHP
PHP实现微信模拟登陆并给用户发送消息的方法【文字,图片,图文】
Jun 29 PHP
PHP获取数组中指定的一列实例
Dec 27 PHP
php封装db类连接sqlite3数据库的方法实例
Dec 19 PHP
Windows服务器中PHP如何安装redis扩展
Sep 27 PHP
PHP并发场景的三种解决方案代码实例
Feb 27 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
PHP实现使用优酷土豆视频地址获取swf播放器分享地址
2014/06/05 PHP
PHP清除数组中所有字符串两端空格的方法
2014/10/20 PHP
PHP验证码生成原理和实现
2016/01/24 PHP
[原创]smarty简单模板变量输出方法
2016/07/09 PHP
setInterval 和 setTimeout会产生内存溢出
2008/02/15 Javascript
jValidate 基于jQuery的表单验证插件
2009/12/12 Javascript
js异步加载的三种解决方案
2013/03/04 Javascript
JavaScript的递归之递归与循环示例介绍
2013/08/05 Javascript
WEB前端开发都应知道的jquery小技巧及jquery三个简写
2015/11/15 Javascript
Nodejs 和 Electron ubuntu下快速安装过程
2018/05/04 NodeJs
Nodejs中获取当前函数被调用的行数及文件名详解
2018/12/12 NodeJs
Vue注册组件命名时不能用大写的原因浅析
2019/04/25 Javascript
微信公众号平台接口开发 菜单管理的实现
2019/08/14 Javascript
在Koa.js中实现文件上传的接口功能
2019/10/08 Javascript
[06:53]DOTA2每周TOP10 精彩击杀集锦vol.3
2014/06/25 DOTA
[49:31]DOTA2-DPC中国联赛 正赛 Elephant vs LBZS BO3 第二场 1月29日
2021/03/11 DOTA
[05:59]带你看看DPC的台前幕后
2021/03/11 DOTA
Python中你应该知道的一些内置函数
2017/03/31 Python
Python排序搜索基本算法之选择排序实例分析
2017/12/09 Python
用pandas按列合并两个文件的实例
2018/04/12 Python
对python sklearn one-hot编码详解
2018/07/10 Python
Python 字符串换行的多种方式
2018/09/06 Python
python3 selenium自动化测试 强大的CSS定位方法
2019/08/23 Python
python爬虫使用正则爬取网站的实现
2020/08/03 Python
HTML5 Canvas实现放大镜效果示例
2020/03/25 HTML / CSS
英国版MAC彩妆品牌:Illamasqua
2018/04/18 全球购物
英国历史最悠久的DJ设备供应商:DJ Finance、DJ Warehouse、The DJ Shop
2019/09/04 全球购物
波兰快递服务:Globkurier.pl
2019/11/08 全球购物
HashMap和Hashtable的区别
2013/05/18 面试题
生态养殖创业计划书
2014/05/06 职场文书
企业职业病防治方案
2014/05/29 职场文书
导游词之江南园林狮子林
2019/09/16 职场文书
三十年再续同学情倡议书
2019/11/27 职场文书
浅谈Python实现opencv之图片色素的数值运算和逻辑运算
2021/06/23 Python
特别篇动画《总之就是非常可爱 ~制服~》PV公开,2022年夏季播出
2022/04/04 日漫
SpringBoot项目多数据源及mybatis 驼峰失效的问题解决方法
2022/07/07 Java/Android