解析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函数
Oct 03 PHP
PHP操作MongoDB时的整数问题及对策说明
May 02 PHP
用PHP实现 上一篇、下一篇的代码
Sep 29 PHP
一个经典的PHP文件上传类分享
Nov 18 PHP
Laravel 5框架学习之表单
Apr 08 PHP
PHP实现仿Google分页效果的分页函数
Jul 29 PHP
PHP连接Nginx服务器并解析Nginx日志的方法
Aug 16 PHP
PHP 以POST方式提交XML、获取XML,解析XML详解及实例
Oct 26 PHP
PHP 序列化和反序列化函数实例详解
Jul 18 PHP
yii2 上传图片的示例代码
Nov 02 PHP
PHP反射实际应用示例
Apr 03 PHP
thinkPHP+mysql+ajax实现的仿百度一下即时搜索效果详解
Jul 15 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
Win2003下APACHE+PHP5+MYSQL4+PHPMYADMIN 的简易安装配置
2006/11/18 PHP
PHP函数addslashes和mysql_real_escape_string的区别
2014/04/22 PHP
FastCGI 进程意外退出造成500错误
2015/07/26 PHP
discuz图片顺序混乱解决方案
2015/07/29 PHP
php实现微信发红包
2015/12/05 PHP
PHP使用Redis实现Session共享的实现示例
2019/05/12 PHP
比较简单的一个符合web标准的JS调用flash方法
2007/11/29 Javascript
javascript 实现子父窗体互相传值的简单实例
2014/02/17 Javascript
javascript实现checkBox的全选,反选与赋值
2015/03/12 Javascript
js调用webservice构造SOAP进行身份验证
2016/04/27 Javascript
js input输入百分号保存数据库失败的解决方法
2018/05/26 Javascript
详解template标签用法(含vue中的用法总结)
2021/01/12 Vue.js
Python 调用VC++的动态链接库(DLL)
2008/09/06 Python
Python实现的基数排序算法原理与用法实例分析
2017/11/23 Python
Python安装lz4-0.10.1遇到的坑
2018/05/20 Python
Python PyQt5模块实现窗口GUI界面代码实例
2020/05/12 Python
AmazeUI 列表的实现示例
2020/08/17 HTML / CSS
世界领先的电子书网站:eBooks.com(在线购买小说、非小说和教科书)
2019/03/30 全球购物
英国领先的新鲜松露和最好的松露产品供应商:TruffleHunter
2019/08/26 全球购物
省优秀教师事迹材料
2014/01/30 职场文书
宗教学大学生职业生涯规划范文
2014/02/08 职场文书
质量月活动策划方案
2014/03/10 职场文书
规划编制实施方案
2014/03/15 职场文书
《郑和远航》教学反思
2014/04/16 职场文书
食品销售计划书
2014/04/26 职场文书
心理咨询承诺书
2014/05/20 职场文书
2014领导班子四风问题查摆思想汇报
2014/09/13 职场文书
公司法定代表人授权委托书
2014/09/29 职场文书
大学生党员个人总结
2015/02/13 职场文书
2015年世界环境日演讲稿
2015/03/18 职场文书
作弊检讨书范文
2015/05/06 职场文书
实习证明格式范文
2015/06/16 职场文书
校园开放日新闻稿
2015/07/17 职场文书
2016公务员年度考核评语
2015/12/01 职场文书
pytorch 中autograd.grad()函数的用法说明
2021/05/12 Python
vue实力踩坑之push当前页无效
2022/04/10 Vue.js