解析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中create table语句的基本语法是
Jan 15 PHP
PHP时间戳使用实例代码
Jun 07 PHP
来自phpguru得Php Cache类源码
Apr 15 PHP
关于Iframe如何跨域访问Cookie和Session的解决方法
Apr 15 PHP
带密匙的php加密解密示例分享
Jan 29 PHP
php中try catch捕获异常实例详解
Nov 21 PHP
php+mysql结合Ajax实现点赞功能完整实例
Jan 30 PHP
php解析http获取的json字符串变量总是空白null
Mar 02 PHP
php实现简单的上传进度条
Nov 17 PHP
php实现登陆模块功能示例
Oct 20 PHP
详解yii2实现分库分表的方案与思路
Feb 03 PHP
php检测mysql表是否存在的方法小结
Jul 20 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
Apache下禁止php文件被直接访问的解决方案
2013/04/25 PHP
php 在字符串指定位置插入新字符的简单实现
2016/06/28 PHP
jQuery 1.3 和 Validation 验证插件1.5.1
2009/07/09 Javascript
javascript 无提示关闭窗口脚本
2009/08/17 Javascript
jquery+json实现的搜索加分页效果
2010/03/31 Javascript
JavaScript语言核心数据类型和变量使用介绍
2013/08/23 Javascript
windows8.1+iis8.5下安装node.js开发环境
2014/12/12 Javascript
JS利用cookie记忆当前位置的防刷新导航效果
2015/10/15 Javascript
基于JS实现发送短信验证码后的倒计时功能(无视页面刷新,页面关闭不进行倒计时功能)
2016/09/02 Javascript
jquery.cookie.js的介绍与使用方法
2017/02/09 Javascript
jquery实现回车键触发事件(实例讲解)
2017/11/21 jQuery
10个经典的网页鼠标特效代码
2018/01/09 Javascript
微信小程序:数据存储、传值、取值详解
2019/05/07 Javascript
微信小程序按钮点击动画效果的实现
2019/09/04 Javascript
在layui tab控件中载入外部html页面的方法
2019/09/04 Javascript
vue实现表单录入小案例
2019/09/27 Javascript
JavaScript实现简单动态表格
2020/12/02 Javascript
一起深入理解js中的事件对象
2021/02/06 Javascript
[01:44]Ti10举办地公布
2019/08/25 DOTA
python远程登录代码
2008/04/29 Python
Python基于回溯法子集树模板解决0-1背包问题实例
2017/09/02 Python
解决vscode python print 输出窗口中文乱码的问题
2018/12/03 Python
Python3 pip3 list 出现 DEPRECATION 警告的解决方法
2019/02/16 Python
Python爬虫之Selenium下拉框处理的实现
2020/12/04 Python
canvas绘制图片drawImage使用方法
2020/09/15 HTML / CSS
银行介绍信范文
2014/01/10 职场文书
办公室人员先进事迹
2014/01/27 职场文书
元旦联欢会主持词
2014/03/26 职场文书
幼儿园大班开学教师寄语
2014/04/03 职场文书
学生会竞选演讲稿
2014/04/24 职场文书
质量提升方案
2014/06/16 职场文书
工作疏忽检讨书500字
2014/10/26 职场文书
雷峰塔导游词
2015/02/09 职场文书
法律进社区活动总结
2015/05/07 职场文书
幼儿园园长六一致辞
2015/07/31 职场文书
学习型家庭事迹材料(2016精选版)
2016/02/29 职场文书