解析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 相关文章推荐
模仿OSO的论坛(一)
Oct 09 PHP
PHP gbk环境下json_dencode传送来的汉字
Nov 13 PHP
php二维数组排序方法(array_multisort usort)
Dec 25 PHP
PHP实现AES256加密算法实例
Sep 22 PHP
PHP中的闭包(匿名函数)浅析
Feb 07 PHP
php正则替换处理HTML页面的方法
Jun 17 PHP
PHP中static关键字以及与self关键字的区别
Jul 01 PHP
PHP编写学校网站上新生注册登陆程序的实例分享
Mar 21 PHP
PHP使用token防止表单重复提交的方法
Apr 07 PHP
PHP中的多种加密技术及代码示例解析
Oct 20 PHP
thinkphp实现分页显示功能
Dec 03 PHP
Yii2实现跨mysql数据库关联查询排序功能代码
Feb 10 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
基于mysql的bbs设计(三)
2006/10/09 PHP
php横向重复区域显示二法
2008/09/25 PHP
PHP 编程安全性小结
2010/01/08 PHP
使用PHP备份MySQL和网站发送到邮箱实例代码
2013/11/28 PHP
PHP中快速生成随机密码的几种方式
2017/04/17 PHP
ThinkPHP 3.2.3实现页面静态化功能的方法详解
2017/08/03 PHP
js 异步处理进度条
2010/04/01 Javascript
javascript 文章截取部分无损html显示实现代码
2010/05/04 Javascript
基于JQuery的6个Tab选项卡插件
2010/09/03 Javascript
jQuery父级以及同级元素查找介绍
2013/09/04 Javascript
从零开始学习Node.js系列教程之基于connect和express框架的多页面实现数学运算示例
2017/04/13 Javascript
Angular 2父子组件数据传递之@Input和@Output详解 (上)
2017/07/05 Javascript
javascript 面向对象实战思想分享
2017/09/07 Javascript
node+koa实现数据mock接口的方法
2017/09/20 Javascript
详解vue 组件之间使用eventbus传值
2017/10/25 Javascript
JS基于设计模式中的单例模式(Singleton)实现封装对数据增删改查功能
2018/02/06 Javascript
浅析node.js的模块加载机制
2018/05/25 Javascript
vue组件定义,全局、局部组件,配合模板及动态组件功能示例
2019/03/19 Javascript
ES6 Iterator接口和for...of循环用法分析
2019/07/31 Javascript
解决vue-photo-preview 异步图片放大失效的问题
2020/07/29 Javascript
js实现复制粘贴的两种方法
2020/12/04 Javascript
[08:44]DOTA2发布会群星聚首 我们都是刀塔人
2014/03/21 DOTA
Python中的MongoDB基本操作:连接、查询实例
2015/02/13 Python
Python编码爬坑指南(必看)
2016/06/10 Python
python爬虫headers设置后无效的解决方法
2017/10/21 Python
python中利用zfill方法自动给数字前面补0
2018/04/10 Python
python发送告警邮件脚本
2018/09/17 Python
Python实现将Excel转换成为image的方法
2018/10/23 Python
Pandas中DataFrame基本函数整理(小结)
2020/07/20 Python
pycharm进入时每次都是insert模式的解决方式
2021/02/05 Python
施华洛世奇韩国官网:SWAROVSKI韩国
2018/06/05 全球购物
机械专业求职信
2014/05/25 职场文书
面试通知短信
2015/04/20 职场文书
2015年团队工作总结范文
2015/05/04 职场文书
2016年小学六一儿童节活动总结
2016/04/06 职场文书
nginx 多个location转发任意请求或访问静态资源文件的实现
2021/03/31 Servers