解析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 相关文章推荐
如何在WIN2K下安装PHP4.04
Oct 09 PHP
php 无限极分类
Mar 27 PHP
php下获取客户端ip地址的函数
Mar 15 PHP
如何用php生成扭曲及旋转的验证码图片
Jun 07 PHP
php获取bing每日壁纸示例分享
Feb 25 PHP
php定时计划任务与fsockopen持续进程实例
May 23 PHP
php类中的$this,static,final,const,self这几个关键字使用方法
Dec 14 PHP
php中二分法查找算法实例分析
Sep 22 PHP
PHP递归遍历文件夹去除注释并压缩php源代码的方法示例
May 23 PHP
laravel-admin的图片删除实例
Sep 30 PHP
php计数排序算法的实现代码(附四个实例代码)
Mar 31 PHP
解决PhpStorm64不能启动的问题
Jun 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
模拟OICQ的实现思路和核心程序(二)
2006/10/09 PHP
php中 ob_start等函数截取标准输出的方法
2015/06/22 PHP
php+mysql实现的无限分类方法类定义与使用示例
2020/05/27 PHP
javascript或asp实现的判断身份证号码是否正确两种验证方法
2009/11/26 Javascript
xss文件页面内容读取(解决)
2010/11/28 Javascript
JQuery学习笔记 nt-child的使用
2011/01/17 Javascript
Jquery插件 easyUI属性汇总
2011/01/19 Javascript
利用jQuery接受和处理xml数据的代码(.net)
2011/03/28 Javascript
Bootstrap实现默认导航栏效果
2020/09/21 Javascript
JavaScript数组去重由慢到快由繁到简(优化篇)
2016/08/26 Javascript
利用jQuery来动态为属性添加或者删除属性的简单方法
2016/12/02 Javascript
JavaScript实现简单评论功能
2017/08/17 Javascript
js禁止浏览器页面后退功能的实例(推荐)
2017/09/01 Javascript
从源码里了解vue中的nextTick的使用
2018/11/22 Javascript
详解小程序设置缓存并且不覆盖原有数据
2019/04/15 Javascript
javascript实现计算器功能
2020/03/30 Javascript
python中使用psutil查看内存占用的情况
2018/06/11 Python
用Python实现大文本文件切割的方法
2019/01/12 Python
Python闭包和装饰器用法实例详解
2019/05/22 Python
PyQt4实时显示文本内容GUI的示例
2019/06/14 Python
Python分割训练集和测试集的方法示例
2019/09/19 Python
关于Pytorch MaxUnpool2d中size操作方式
2020/01/03 Python
keras slice layer 层实现方式
2020/06/11 Python
关于Python3爬虫利器Appium的安装步骤
2020/07/29 Python
Python3如何实现Win10桌面自动切换
2020/08/11 Python
Django数据统计功能count()的使用
2020/11/30 Python
Android面试宝典
2013/08/06 面试题
Unix如何在一行中运行多个命令
2015/05/29 面试题
大学生表扬信范文
2014/01/09 职场文书
年度考核评语
2014/01/19 职场文书
本科生职业生涯规划书范文
2014/01/21 职场文书
保险公司晨会主持词
2014/03/22 职场文书
廉洁自律演讲稿
2014/05/22 职场文书
2014年煤矿工人工作总结
2014/12/08 职场文书
2015年效能监察工作总结
2015/04/23 职场文书
SpringBoot2零基础到精通之数据库专项精讲
2022/03/22 Java/Android