1. <?php
  2. /**
  3. * curl 多线程
  4. * @param array $array 并行网址
  5. * @param int $timeout 超时时间
  6. * @return array
  7. */
  8. function Curl_http($array,$timeout){
  9. $res = array();
  10. $mh = curl_multi_init();//创建多个curl语柄
  11. foreach($array as $k=>$url){
  12. $conn[$k]=curl_init($url);
  13. curl_setopt($conn[$k], CURLOPT_TIMEOUT, $timeout);//设置超时时间
  14. curl_setopt($conn[$k], CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');
  15. curl_setopt($conn[$k], CURLOPT_MAXREDIRS, 7);//HTTp定向级别
  16. curl_setopt($conn[$k], CURLOPT_HEADER, 0);//这里不要header,加块效率
  17. curl_setopt($conn[$k], CURLOPT_FOLLOWLOCATION, 1); // 302 redirect
  18. curl_setopt($conn[$k],CURLOPT_RETURNTRANSFER,1);
  19. curl_multi_add_handle ($mh,$conn[$k]);
  20. }
  21.  
  22. // 执行批处理句柄
  23. $active = null;
  24. do{
  25. $mrc = curl_multi_exec($mh,$active);//当无数据,active=true
  26. }while($mrc == CURLM_CALL_MULTI_PERFORM);//当正在接受数据时
  27. while($active && $mrc == CURLM_OK){//当无数据时或请求暂停时,active=true
  28. // if(curl_multi_select($mh) != -1){
  29. do{
  30. $mrc = curl_multi_exec($mh, $active);
  31. }while($mrc == CURLM_CALL_MULTI_PERFORM);
  32. // }
  33. }
  34.  
  35. foreach ($array as $k => $url) {
  36. curl_error($conn[$k]);
  37. $res[$k]=curl_multi_getcontent($conn[$k]);//获得返回信息
  38. $header[$k]=curl_getinfo($conn[$k]);//返回头信息
  39. curl_close($conn[$k]);//关闭语柄
  40. curl_multi_remove_handle($mh , $conn[$k]);//释放资源
  41. }
  42.  
  43. curl_multi_close($mh);
  44. return $res;
  45.  
  46. //测试
  47. $array = array(
  48. "http://www.weibo.com/",
  49. "http://www.renren.com/",
  50. "http://www.qq.com/"
  51. );
  52. $data = Curl_http($array,'10');//调用
  53. print_r($data);//输出
  54. exit;
  55.  
  56. ?>

这个多线程的写法步骤:
第一步:调用curl_multi_init
第二步:循环调用curl_multi_add_handle
这一步需要注意的是,curl_multi_add_handle的第二个参数是由curl_init而来的子handle。
第三步:持续调用curl_multi_exec
第四步:根据需要循环调用curl_multi_getcontent获取结果
第五步:调用curl_multi_remove_handle,并为每个字handle调用curl_close
第六步:调用curl_multi_close

php curl 多线程方法的更多相关文章

  1. CURL使用方法详解

    php采集神器CURL使用方法详解 作者:佚名  更新时间:2016-10-21   对于做过数据采集的人来说,cURL一定不会陌生.虽然在PHP中有file_get_contents函数可以获取远程 ...

  2. curl多线程类。

    <?php /* * Curl 多线程类 * 使用方法: * ======================== $urls = array("http://baidu.com" ...

  3. PHP CURL 多线程 GET/POST 类

    PHP CURL 多线程 GET/POST 类 2015-01-01 分类:技术文章 阅读(623) 评论(0) 如果有需要更正或更高效的建议,欢迎在OSchina分享~\(≧▽≦)/~ http:/ ...

  4. [转]用多线程方法实现在MFC/WIN32中调用OpenGL函数并创建OpenGL窗口

    原文链接: 1.用多线程方法实现在MFC/WIN32中调用OpenGL函数并创建OpenGL窗口 2.Windows MFC 两个OpenGL窗口显示与线程RC问题

  5. C#常用多线程方法

    1.  Thread类 C#多线程编程中Thread类需要包含名称空间System.Threading. class Program { static void Main(string[] args) ...

  6. curl多线程下载类

    <?php /** * curl多线程下载类 */class MultiHttpRequest{ public $urls = array (); private $res = array () ...

  7. Qt 最简单的多线程方法QtConcurrent::run()

    Qt 最简单的多线程方法QtConcurrent::run()(转载) 最近编写了一个软件,没有考虑多线程的问题,编好以后,软件在执行计算的时候,鼠标响应有时候会延迟,但是完全能用,考虑到后续随着计算 ...

  8. 六种多线程方法解决UI线程堵塞

    http://blog.csdn.net/oyi319/article/details/6851371 一.六种多线程方法 .NET Framework2.0框架提供了至少4种方式实现多线程,它们是& ...

  9. CURL 多线程问题

    http://blog.csdn.net/wslz2001/article/details/12117127 默认情况下libcurl完成一个任务以后,出于重用连接的考虑不会马上关闭 如果没有新的TC ...

随机推荐

  1. 【每日一linux命令5】命令的结合与定向

    命令中除了一般命令外,还有管道(或称途径)(|)与定向(>或>>). 管道(途径)的用法: "命令一[选项]"|"命令二[选项]",也就是将& ...

  2. Which language is best, C, C++, Python or Java?什么编程语言最好

    Either you fuck the life or the life fucks you. 转载自 quora 大致翻译一下,不喜勿喷,谢谢支持!以下是内容: I have used each o ...

  3. EL表达式杂项

    1.<%@ page isELIgnored="false" %> 是否忽略EL表达式,如果值为ture,那么  ${..}这样的会直接原样输出,不会进行EL表达式计算 ...

  4. [LeetCode] Reverse Linked List 倒置链表

    Reverse a singly linked list. click to show more hints. Hint: A linked list can be reversed either i ...

  5. [LeetCode] Rotate List 旋转链表

    Given a list, rotate the list to the right by k places, where k is non-negative. For example:Given 1 ...

  6. kubernetes 文档

    kubernetes 官方文档:http://kubernetes.io/docs/ null

  7. 5G关键技术评述

    业内重大事件: 张  平:无线通信领域专家,北京邮电大学教授,博士生导师,现任北京邮电大学无线新技术研究所(WTI)所长.泛网无线通信教育部重点实验室主任以及中德软件研究所副所长.张平教授是国家宽带无 ...

  8. 数据集偏斜 - class skew problem - 以SVM松弛变量为例

    原文 接下来要说的东西其实不是松弛变量本身,但由于是为了使用松弛变量才引入的,因此放在这里也算合适,那就是惩罚因子C.回头看一眼引入了松弛变量以后的优化问题: 注意其中C的位置,也可以回想一下C所起的 ...

  9. UDP通信

    package com.slp; import java.io.IOException; import java.net.DatagramPacket; import java.net.Datagra ...

  10. UEFI+GPT安装windows

    首先bios开启uefi windows安装选择驱动器界面:F10 进入命令行: list disk select disk 0 clean convert gpt