PHP CURL 多线程操作代码实例


Posted in PHP onMay 13, 2015

使用方法:

$urls = array("http://baidu.com", "http://21andy.com", "http://google.com");
$mp = new MultiHttpRequest($urls);
$mp->start();
/*
 * Curl 多线程类
 * 使用方法:
 * ========================
$urls = array("http://baidu.com", "http://dzone.com", "http://google.com");
$mp = new MultiHttpRequest($urls);
$mp->start();
 * ========================
 */
class MultiHttpRequest {
  public $urls = array();
  public $curlopt_header = 1;
  public $method = "GET";
 
  function __construct($urls = false) {
    $this->urls = $urls;
  }
 
  function set_urls($urls) {
    $this->urls = $urls;
    return $this;
   }
 
   function is_return_header($b) {
     $this->curlopt_header = $b;
     return $this;
   }
 
   function set_method($m) {
     $this->medthod = strtoupper($m);
     return $this;
   }
 
   function start() {
     if(!is_array($this->urls) or count($this->urls) == 0){
      return false;
     }
     $curl = $text = array();
     $handle = curl_multi_init();
     foreach($this->urls as $k=>$v){
      $curl[$k] = $this->add_handle($handle, $v);
     }
 
     $this->exec_handle($handle);
     foreach($this->urls as $k=>$v){
       curl_multi_getcontent($curl[$k]);
       echo $curl[$k]."\n";
       //$text[$k] = curl_multi_getcontent($curl[$k]);
       //echo $text[$k], "\n\n";
       curl_multi_remove_handle($handle, $curl[$k]);
     }
     curl_multi_close($handle);
   }
 
   private function add_handle($handle, $url) {
     $curl = curl_init();
     curl_setopt($curl, CURLOPT_URL, $url);
     curl_setopt($curl, CURLOPT_HEADER, $this->curlopt_header);
     curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
     curl_multi_add_handle($handle, $curl);
     return $curl;
   }
 
   private function exec_handle($handle) {
     $flag = null;
     do {
      curl_multi_exec($handle, $flag);
     } while ($flag > 0);
   }
}
PHP 相关文章推荐
fleaphp rolesNameField bug解决方法
Apr 23 PHP
php设计模式 Mediator (中介者模式)
Jun 26 PHP
php模拟js函数unescape的函数代码
Oct 20 PHP
async和DOM Script文件加载比较
Jul 20 PHP
PHP实现更新中间关联表数据的两种方法
Sep 01 PHP
php采用file_get_contents代替使用curl实例
Nov 07 PHP
php调用新浪短链接API的方法
Nov 08 PHP
php专用数组排序类ArraySortUtil用法实例
Apr 03 PHP
PHP编程求最大公约数与最小公倍数的方法示例
May 29 PHP
PHP实现的redis主从数据库状态检测功能示例
Jul 20 PHP
PHP实现的链式队列结构示例
Sep 15 PHP
tp5.1 框架数据库-数据集操作实例分析
May 26 PHP
百度工程师讲PHP函数的实现原理及性能分析(三)
May 13 #PHP
百度工程师讲PHP函数的实现原理及性能分析(二)
May 13 #PHP
百度工程师讲PHP函数的实现原理及性能分析(一)
May 13 #PHP
PHP版本如何选择?应该使用哪个版本?
May 13 #PHP
PHP Hash算法:Times33算法代码实例
May 13 #PHP
你应该知道PHP浮点数知识
May 13 #PHP
PHP浮点数精度问题汇总
May 13 #PHP
You might like
php 伪造本地文件包含漏洞的代码
2011/11/03 PHP
php array的学习笔记
2012/05/16 PHP
PHP 读取和编写 XML
2014/11/19 PHP
PHP图片处理之使用imagecopyresampled函数裁剪图片例子
2014/11/19 PHP
PHP二分查找算法示例【递归与非递归方法】
2016/09/29 PHP
PHP读取文件,解决中文乱码UTF-8的方法分析
2020/01/22 PHP
原生js拖拽(第一课 未兼容)拖拽思路
2013/03/29 Javascript
你必须知道的Javascript知识点之"字面量和对应类型"说明介绍
2013/04/23 Javascript
js获取某月的最后一天日期的简单实例
2013/06/22 Javascript
Javascript之Math对象详解
2016/06/07 Javascript
js前端导出Excel的方法
2017/11/01 Javascript
原生JS+CSS实现炫酷重力模拟弹跳系统的登录页面
2017/11/01 Javascript
详解React-Router中Url参数改变页面不刷新的解决办法
2018/05/08 Javascript
在vue中多次调用同一个定义全局变量的实例
2018/09/25 Javascript
vuejs数据超出单行显示更多,点击展开剩余数据实例
2019/05/05 Javascript
基于Proxy的小程序状态管理实现
2019/06/14 Javascript
原生JS实现汇率转换功能代码实例
2020/05/13 Javascript
JavaScript实现移动小精灵的案例代码
2020/12/12 Javascript
Python 条件判断的缩写方法
2008/09/06 Python
python实现对一个完整url进行分割的方法
2015/04/29 Python
在Python中操作文件之seek()方法的使用教程
2015/05/24 Python
Python实现快速计算词频功能示例
2018/06/25 Python
win10系统下Anaconda3安装配置方法图文教程
2018/09/19 Python
对python操作kafka写入json数据的简单demo分享
2018/12/27 Python
python识别图像并提取文字的实现方法
2019/06/28 Python
Python Lambda函数使用总结详解
2019/12/11 Python
Tensorflow进行多维矩阵的拆分与拼接实例
2020/02/07 Python
Python基于Twilio及腾讯云实现国际国内短信接口
2020/06/18 Python
浅谈PyTorch中in-place operation的含义
2020/06/27 Python
解决python3输入的坑——input()
2020/12/05 Python
详解pandas映射与数据转换
2021/01/22 Python
python基于Kivy写一个图形桌面时钟程序
2021/01/28 Python
医学检验专业个人求职信范文
2013/12/04 职场文书
自我鉴定注意事项
2014/01/19 职场文书
秋季红领巾广播稿
2014/01/27 职场文书
车间主任岗位职责范本
2015/04/08 职场文书