解析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 相关文章推荐
基于OpenCV的PHP图像人脸识别技术
Oct 11 PHP
PHP中英混合字符串截取函数代码
Jul 17 PHP
PHP获取url的函数代码
Aug 02 PHP
解析用PHP读写音频文件信息的详解(支持WMA和MP3)
May 10 PHP
PHP实现把数字ID转字母ID
Aug 12 PHP
php+js iframe实现上传头像界面无跳转
Apr 29 PHP
PHP基于CURL进行POST数据上传实例
Nov 10 PHP
PHP+jQuery+Ajax实现分页效果 jPaginate插件的应用
Oct 09 PHP
功能强大的PHP图片处理类(水印、透明度、旋转)
Oct 21 PHP
yii数据库的查询方法
Dec 28 PHP
PHP抽象类和接口用法实例详解
Jul 20 PHP
PHP超级全局变量【$GLOBALS,$_SERVER,$_REQUEST等】用法实例分析
Dec 11 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 超链接 抓取实现代码
2009/06/29 PHP
Zend的AutoLoad机制介绍
2012/09/27 PHP
php简单获取目录列表的方法
2015/03/24 PHP
PHP学习笔记(一):基本语法之标记、空白、和注释
2015/04/17 PHP
php中array_unshift()修改数组key注意事项分析
2016/05/16 PHP
设定php简写功能的方法
2019/11/28 PHP
PHP的图像处理实例小结【文字水印、图片水印、压缩图像等】
2019/12/20 PHP
JavaScript判断两种格式的输入日期的正确性的代码
2007/03/25 Javascript
javascript div 弹出可拖动窗口
2009/02/26 Javascript
jquery tools系列 expose 学习
2009/09/06 Javascript
Js中setTimeout()和setInterval() 何时被调用执行的用法
2013/04/12 Javascript
js自动查找select下拉的菜单并选择(示例代码)
2014/02/26 Javascript
Javascript学习笔记之 对象篇(一) : 对象的使用和属性
2014/06/24 Javascript
AngularJS页面访问时出现页面闪烁问题的解决
2016/03/06 Javascript
Angular.js 实现数字转换汉字实例代码
2016/07/14 Javascript
详解微信小程序入门五: wxml文件引用、模版、生命周期
2017/01/20 Javascript
js实现自定义进度条效果
2017/03/15 Javascript
ES6新特性之字符串的扩展实例分析
2017/04/01 Javascript
深入浅析Vue不同场景下组件间的数据交流
2017/08/15 Javascript
JS 实现发送短信验证码的“59秒后重新发送验证短信”功能
2019/08/23 Javascript
JS获取当前时间的年月日时分秒及时间的格式化的方法
2019/12/18 Javascript
Python多进程编程技术实例分析
2014/09/16 Python
Django的分页器实例(paginator)
2017/12/01 Python
Python实现的爬取百度贴吧图片功能完整示例
2019/05/10 Python
基于python2.7实现图形密码生成器的实例代码
2019/11/05 Python
html Table 表头固定的实现
2019/01/22 HTML / CSS
Kivari官网:在线购买波西米亚服装
2018/10/29 全球购物
美国婴儿和儿童服装购物网站:PatPat
2020/10/01 全球购物
自荐信的格式
2014/03/10 职场文书
2014年英语工作总结
2014/12/20 职场文书
英文升职感谢信
2015/01/23 职场文书
金陵十三钗观后感
2015/06/04 职场文书
2016年大学生社会实践心得体会
2015/10/09 职场文书
2016年社区党支部公开承诺书
2016/03/25 职场文书
图片批量处理 - 尺寸、格式、水印等
2022/03/07 杂记
MySQL磁盘碎片整理实例演示
2022/04/03 MySQL