解析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 相关文章推荐
ionCube 一款类似zend的PHP加密/解密工具
Jul 25 PHP
php empty,isset,is_null判断比较(差异与异同)
Oct 19 PHP
在php和MySql中计算时间差的方法
Apr 22 PHP
thinkPHP的Html模板标签使用方法
Nov 13 PHP
浅析php中抽象类和接口的概念以及区别
Jun 27 PHP
php清空(删除)指定目录下的文件,不删除目录文件夹的实现代码
Sep 04 PHP
php数组去除空值函数分享
Feb 02 PHP
PHP中使用php://input处理相同name值的表单数据
Feb 03 PHP
php实现根据IP地址获取其所在省市的方法
Apr 30 PHP
Zend Framework入门教程之Zend_View组件用法示例
Dec 09 PHP
PHP编程实现计算抽奖概率算法完整实例
Aug 09 PHP
PHP dirname(__FILE__)原理及用法解析
Oct 28 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入库和出库
2013/06/25 PHP
PHP中CURL的CURLOPT_POSTFIELDS参数使用细节
2014/03/17 PHP
php字符串替换函数substr_replace()用法实例
2015/03/17 PHP
PHP实现的简单异常处理类示例
2017/05/04 PHP
Laravel模型事件的实现原理详解
2018/03/14 PHP
PHP call_user_func和call_user_func_array函数的简单理解与应用分析
2019/11/25 PHP
JavaScript去除空格的几种方法
2006/10/03 Javascript
Javascript 通过json自动生成Dom的代码
2010/04/01 Javascript
jquery实现的美女拼图游戏实例
2015/05/04 Javascript
jQuery计算文本框字数及限制文本框字数的方法
2016/03/01 Javascript
浅谈JS使用[ ]来访问对象属性
2016/09/21 Javascript
js复制内容到剪贴板代码,js复制代码的简单实例
2016/10/27 Javascript
原生js实现键盘控制div移动且解决停顿问题
2016/12/05 Javascript
Vue2.0实现组件数据的双向绑定问题
2018/03/06 Javascript
jquery点击回车键实现登录效果并默认焦点的方法
2018/03/09 jQuery
微信小程序云开发之使用云存储
2019/05/17 Javascript
js实现倒计时秒杀效果
2020/03/25 Javascript
关于vue属性使用和不使用冒号的区别说明
2020/10/22 Javascript
[02:56]DOTA2英雄基础教程 巨魔战将
2013/12/10 DOTA
python实现搜索指定目录下文件及文件内搜索指定关键词的方法
2015/06/28 Python
pycharm 设置项目的根目录教程
2020/02/12 Python
详解Python 中的容器 collections
2020/08/17 Python
python 星号(*)的多种用途
2020/09/21 Python
Python爬取股票信息,并可视化数据的示例
2020/09/26 Python
用python对oracle进行简单性能测试
2020/12/05 Python
python中函数返回多个结果的实例方法
2020/12/16 Python
Python的scikit-image模块实例讲解
2020/12/30 Python
购买原创艺术品:Zatista
2019/11/09 全球购物
AJAX的全称是什么
2012/11/06 面试题
缓刑人员的思想汇报
2014/01/11 职场文书
中等生评语大全
2014/05/04 职场文书
西游降魔篇观后感
2015/06/15 职场文书
学生早退检讨书(范文)
2019/08/19 职场文书
100句拼搏进取的名言警句,值得一读!
2019/10/07 职场文书
导游词之南昌滕王阁
2019/11/29 职场文书
常用的文件对应的MIME类型汇总
2022/04/26 HTML / CSS