解析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 相关文章推荐
MySQL修改密码方法总结
Mar 25 PHP
php 获取今日、昨日、上周、本月的起始时间戳和结束时间戳的方法
Sep 28 PHP
PHP获取浏览器信息类和客户端地理位置的2个方法
Apr 24 PHP
PHP学习笔记之字符串编码的转换和判断
May 22 PHP
php读取csv文件并输出的方法
Mar 14 PHP
PHP函数func_num_args用法实例分析
Dec 07 PHP
PHP下SSL加密解密、验证、签名方法(很简单)
Jun 28 PHP
PHP爬虫之百万级别知乎用户数据爬取与分析
Jan 22 PHP
PHP 读取大文件并显示的简单实例(推荐)
Aug 12 PHP
PHP解压ZIP文件到指定文件夹的方法
Nov 17 PHP
在Laravel5.6中使用Swoole的协程数据库查询
Jun 15 PHP
PHP连接及操作PostgreSQL数据库的方法详解
Jan 30 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数组函数序列之ksort()对数组的元素键名进行升序排序,保持索引关系
2011/11/02 PHP
php设计模式之单例模式使用示例
2014/01/20 PHP
php实现二进制和文本相互转换的方法
2015/04/18 PHP
护卫神php套件 php版本升级方法(php5.5.24)
2015/05/10 PHP
php实现比较全的数据库操作类
2015/06/18 PHP
PHP迭代器和迭代的实现与使用方法分析
2018/04/19 PHP
JS在IE和FireFox之间常用函数的区别小结
2010/03/12 Javascript
Jquery Ajax学习实例4 向WebService发出请求,返回实体对象的异步调用
2010/03/16 Javascript
js 一个关于图片onload加载的事
2013/11/10 Javascript
javascript 按键事件(兼容各浏览器)
2013/12/20 Javascript
jquery插件开发之实现jquery手风琴功能分享
2014/03/10 Javascript
js实现带圆角的两级导航菜单效果代码
2015/08/24 Javascript
js is_valid_filename验证文件名的函数
2017/07/19 Javascript
Angular.js前台传list数组由后台spring MVC接收数组示例代码
2017/07/31 Javascript
浅析Vue自定义组件的v-model
2017/11/26 Javascript
webstrom Debug 调试vue项目的方法步骤
2018/07/17 Javascript
JS 音频可视化插件Wavesurfer.js的使用教程
2018/10/31 Javascript
详解ES6 中的Object.assign()的用法实例代码
2021/01/11 Javascript
原生JavaScript实现进度条
2021/02/19 Javascript
Python中的anydbm模版和shelve模版使用指南
2015/07/09 Python
Python3实现购物车功能
2018/04/18 Python
pandas 根据列的值选取所有行的示例
2018/11/07 Python
Python3实现取图片中特定的像素替换指定的颜色示例
2019/01/24 Python
Python中super函数用法实例分析
2019/03/18 Python
python使用原始套接字发送二层包(链路层帧)的方法
2019/07/22 Python
pandas参数设置的实用小技巧
2020/08/23 Python
Gap英国官网:Gap UK
2018/07/18 全球购物
美国家居装饰店:Z Gallerie
2020/12/28 全球购物
网友共享的几个面试题关于Java和Unix等方面的
2016/09/08 面试题
硕士研究生自我鉴定范文
2013/12/27 职场文书
素质拓展感言
2014/01/29 职场文书
2014年元旦联欢会活动策划方案
2014/02/16 职场文书
大学毕业寄语大全
2014/04/10 职场文书
单位工作证明范文
2014/09/14 职场文书
4种方法python批量修改替换列表中元素
2022/04/07 Python
教你使用RustDesk 搭建一个自己的远程桌面中继服务器
2022/08/14 Servers