解析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字符串截取问题
Nov 28 PHP
MySQL授权问题总结
May 06 PHP
php常用Output和ptions/Info函数集介绍
Jun 19 PHP
基于PHP文件操作的详细诠释
Jun 21 PHP
php生成二维码
Aug 10 PHP
php基于curl主动推送最新内容给百度收录的方法
Oct 14 PHP
遍历指定目录,并存储目录内所有文件属性信息的php代码
Oct 28 PHP
PHP利用正则表达式将相对路径转成绝对路径的方法示例
Feb 28 PHP
PHP实现的Redis多库选择功能单例类
Jul 27 PHP
PHP Post获取不到非表单数据的问题解决办法
Feb 27 PHP
PHP简单实现正则匹配省市区的方法
Apr 13 PHP
thinkphp 框架数据库切换实现方法分析
May 18 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生成WAP页面
2006/10/09 PHP
Laravel模型间关系设置分表的方法示例
2018/04/21 PHP
PHP抽象类基本用法示例
2018/12/28 PHP
Laravel框架查询构造器简单示例
2019/05/08 PHP
pjblog修改技巧汇总
2007/03/12 Javascript
各种效果的jquery ui(接口)介绍
2008/09/17 Javascript
IE无法设置短域名下Cookie
2010/09/23 Javascript
图片上传判断及预览脚本的效果实例
2013/08/07 Javascript
浅析JavaScript中的常用算法与函数
2013/11/21 Javascript
jquery内置验证(validate)使用方法示例(表单验证)
2013/12/04 Javascript
函数式 JavaScript(一)简介
2014/07/07 Javascript
兼容各大浏览器的JavaScript阻止事件冒泡代码
2015/07/09 Javascript
js实现跨域访问的三种方法
2015/12/09 Javascript
codeMirror插件使用讲解
2017/01/16 Javascript
webpack中如何使用雪碧图的示例代码
2018/11/11 Javascript
详解React 服务端渲染方案完美的解决方案
2018/12/14 Javascript
Angular6新特性之Angular Material
2018/12/28 Javascript
Element Steps步骤条的使用方法
2020/07/26 Javascript
如何阻止移动端浏览器点击图片浏览
2020/08/29 Javascript
python使用reportlab画图示例(含中文汉字)
2013/12/03 Python
Python中类型关系和继承关系实例详解
2015/05/25 Python
Python使用multiprocessing创建进程的方法
2015/06/04 Python
在DigitalOcean的服务器上部署flaskblog应用
2015/12/19 Python
Python自定义主从分布式架构实例分析
2016/09/19 Python
python使用rpc框架gRPC的方法
2018/08/24 Python
详解Python安装tesserocr遇到的各种问题及解决办法
2019/03/07 Python
Django中create和save方法的不同
2019/08/13 Python
Python实现二叉树的最小深度的两种方法
2019/09/30 Python
Django 后台带有字典的列表数据与页面js交互实例
2020/04/03 Python
如何验证python安装成功
2020/07/06 Python
Python爬虫UA伪装爬取的实例讲解
2021/02/19 Python
小学生家长评语大全
2014/02/10 职场文书
《天游峰的扫路人》教学反思
2014/04/25 职场文书
优秀毕业生就业推荐信
2014/05/22 职场文书
2015年发展党员工作总结报告
2015/03/31 职场文书
HTML中table表格拆分合并(colspan、rowspan)
2021/04/07 HTML / CSS