解析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 Ajax实现页面无刷新发表评论
Jan 02 PHP
php防注
Jan 15 PHP
PHP 加密与解密的斗争
Apr 17 PHP
php Smarty初体验二 获取配置信息
Aug 08 PHP
PHP中$_SERVER的详细参数与说明介绍
Oct 26 PHP
PHP包含文件函数include、include_once、require、require_once区别总结
Apr 05 PHP
单台服务器的PHP进程之间实现共享内存的方法
Jun 13 PHP
PHP生成随机密码类分享
Jun 25 PHP
PHP中的插件机制原理和实例
Jul 08 PHP
PHP实现微信退款功能
Oct 02 PHP
PHP时间函数使用详解
Mar 21 PHP
php如何把表单内容提交到数据库
Jul 08 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中DOMDocument简单用法示例代码(XML创建、添加、删除、修改)
2010/12/19 PHP
基于PHP异步执行的常用方式详解
2013/06/03 PHP
关于PHP中Session文件过多的问题及session文件保存位置
2016/03/17 PHP
php的socket编程详解
2016/11/20 PHP
解决Yii2邮件发送结果返回成功,但接收不到邮件的问题
2017/05/23 PHP
php设计模式之正面模式实例分析【星际争霸游戏案例】
2020/03/24 PHP
JS Array对象入门分析
2008/10/30 Javascript
JavaScript实现存储HTML字符串示例
2014/04/21 Javascript
纯javascript实现的小游戏《Flappy Pig》实例
2015/07/27 Javascript
JavaScript动态提示输入框输入字数的方法
2015/07/27 Javascript
深入浅出 jQuery中的事件机制
2016/08/23 Javascript
jQuery实现贪吃蛇小游戏(附源码下载)
2017/03/04 Javascript
详解Vue.js入门环境搭建
2017/03/17 Javascript
史上最全JavaScript常用的简写技巧(推荐)
2017/08/17 Javascript
Bootstrap-table使用footerFormatter做统计列功能
2018/09/07 Javascript
Vue框架下引入ActiveX控件的问题解决
2019/03/25 Javascript
Promise扫盲贴
2019/06/24 Javascript
javascript面向对象三大特征之继承实例详解
2019/07/24 Javascript
vue 项目打包时样式及背景图片路径找不到的解决方式
2019/11/12 Javascript
环形加载进度条封装(Vue插件版和原生js版)
2019/12/04 Javascript
python抓取某汽车网数据解析html存入excel示例
2013/12/04 Python
利用Python爬虫给孩子起个好名字
2017/02/14 Python
Pandas之read_csv()读取文件跳过报错行的解决
2020/04/21 Python
Python 找出出现次数超过数组长度一半的元素实例
2020/05/11 Python
python 实现全球IP归属地查询工具
2020/12/18 Python
银行出纳岗位职责
2013/11/25 职场文书
结婚喜宴家长答谢词
2014/01/15 职场文书
初中学校军训方案
2014/05/09 职场文书
售后服务承诺书怎么写
2014/05/21 职场文书
会计系毕业求职信
2014/08/07 职场文书
家具商场的活动方案
2014/08/16 职场文书
大学毕业典礼演讲稿
2014/09/09 职场文书
党员个人整改措施
2014/10/24 职场文书
实习生辞职信范文
2015/03/02 职场文书
HTML+CSS制作心跳特效的实现
2021/05/26 HTML / CSS
java实现web实时消息推送的七种方案
2022/07/23 Java/Android