源码论坛公告:本站是一个交流学习建站资源的社区论坛,旨在交流学习源码脚本等资源技术,欢迎大家投稿发言! 【点击此处将锦尚放在桌面

源码论坛,商业源码下载,尽在锦尚中国商业源码论坛

 找回密码
 会员注册

QQ登录

只需一步,快速开始

查看: 5807|回复: 0

[PHP编程] PHP利用多线程下载远程多个文件的简单示例

[复制链接]

3123

主题

3525

帖子

14万

金币

超级版主

Rank: 8Rank: 8

积分
287186
发表于 2023-1-10 16:23:35 | 显示全部楼层 |阅读模式
这篇文章主要为大家详细介绍了PHP利用多线程下载远程多个文件的简单示例,具有一定的参考价值,可以用来参考一下。

感兴趣的小伙伴,下面一起跟随512笔记的小玲来看看吧!

代码如下:
  1. function remote($urls, $name = '', $path = '', $dir = './images/') {
  2. if (!is_array($urls) or count($urls) == 0) {
  3.   return false;
  4. }
  5. dmkdir($dir);
  6. $curl = $text = array();
  7. foreach($urls as $k => $v) {
  8.   if (!empty($v) && preg_match("~^http~i", $v)) {
  9.    $nurl[$k] = trim(str_replace(' ', "%20", $v));
  10.    $curl[$k] = curl_init($nurl[$k]);
  11.    curl_setopt($curl[$k], CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4 );
  12.    curl_setopt($curl[$k], CURLOPT_RETURNTRANSFER, 1);
  13.    curl_setopt($curl[$k], CURLOPT_HEADER, 0);
  14.    curl_setopt($curl[$k], CURLOPT_CONNECTTIMEOUT, 20);
  15.    if(!isset($handle)){
  16.     $handle = curl_multi_init();
  17.    }
  18.    curl_multi_add_handle($handle, $curl[$k]);
  19.   }
  20.   continue ;
  21. }
  22. $active = null;
  23. do{
  24.   $mrc = @curl_multi_exec($handle, $active);
  25. } while ($mrc == CURLM_CALL_MULTI_PERFORM);
  26. while ($active && $mrc == CURLM_OK) {
  27.   if (curl_multi_select($handle) != -1) {
  28.    do {
  29.     $mrc = curl_multi_exec($handle, $active);
  30.    } while ($mrc == CURLM_CALL_MULTI_PERFORM);
  31.   }
  32. }
  33. foreach ($curl as $k => $v) {
  34.    if (curl_error($curl[$k]) == "") {
  35.     if ($k == 0) {
  36.      $fname[$k] = strtolower($name . '.' . pathinfo($urls[$k], PATHINFO_EXTENSION));
  37.     } else {
  38.      $fname[$k] = strtolower($name . '_' . $k . '.' . pathinfo($urls[$k], PATHINFO_EXTENSION));
  39.     }
  40.     $text[$k] = (string) curl_multi_getcontent($curl[$k]);
  41.     $filedir[$k] = $dir.'/' . $fname[$k];
  42.    if (file_put_contents($filedir[$k], $text[$k])) {
  43.     $filepath[$k] = $path . $fname[$k];
  44.    }
  45.   }
  46.   curl_multi_remove_handle($handle, $curl[$k]);
  47.   curl_close($curl[$k]);
  48. }
  49. curl_multi_close($handle);
  50. return $filepath;
  51. }
复制代码
您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

锦尚中国源码论坛

聚合标签|锦尚中国,为中国网站设计添动力 ( 鲁ICP备09033200号 ) |网站地图

GMT+8, 2024-10-16 16:33 , Processed in 0.113174 second(s), 25 queries .

带宽由 锦尚数据 提供 专业的数据中心

© 锦尚中国源码论坛 52jscn Inc. 非法入侵必将受到法律制裁 法律顾问:IT法律网 & 褚福省律师 锦尚爱心 版权申诉 版权与免责声明