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 相关文章推荐
PHP 第一节 php简介
Apr 28 PHP
谈谈关于php的优点与缺点
Apr 11 PHP
浅析php中jsonp的跨域实例
Jun 21 PHP
php根据年月获取季度的方法
Mar 31 PHP
PHP把空格、换行符、中文逗号等替换成英文逗号的正则表达式
May 04 PHP
详解PHP数组赋值方法
Nov 07 PHP
php+ajax简单实现全选删除的方法
Dec 06 PHP
PHP常用的三种设计模式
Feb 17 PHP
PHP+原生态ajax实现的省市联动功能详解
Aug 15 PHP
Laravel框架学习笔记之批量更新数据功能
May 30 PHP
laradock环境docker-compose操作详解
Jul 29 PHP
php屏蔽错误及提示的方法
May 10 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
fleaphp crud操作之findByField函数的使用方法
2011/04/23 PHP
浅析php中jsonp的跨域实例
2013/06/21 PHP
让codeigniter与swfupload整合的最佳解决方案
2014/06/12 PHP
php中time()与$_SERVER[REQUEST_TIME]用法区别
2014/11/19 PHP
基于PHP后台的Android新闻浏览客户端
2016/05/23 PHP
js获取提交的字符串的字节数
2009/02/09 Javascript
js中for in的用法示例解析
2013/12/25 Javascript
js实现文本框中焦点在最后位置
2014/03/04 Javascript
JavaScript中的类(Class)详细介绍
2014/12/30 Javascript
jQuery实现从身份证号中获取出生日期和性别的方法分析
2016/02/25 Javascript
JavaScript是如何实现继承的(六种方式)
2016/03/31 Javascript
浅谈jQuery中事情的动态绑定
2017/02/12 Javascript
ES6新特性之Object的变化分析
2017/03/31 Javascript
bootstrap是什么_动力节点Java学院整理
2017/07/14 Javascript
React Native AsyncStorage本地存储工具类
2017/10/24 Javascript
jQuery事件blur()方法的使用实例讲解
2019/03/30 jQuery
javascript面向对象三大特征之多态实例详解
2019/07/24 Javascript
Nautil 中使用双向数据绑定的实现
2019/10/02 Javascript
在Vue中使用CSS3实现内容无缝滚动的示例代码
2020/11/27 Vue.js
在Python中使用第三方模块的教程
2015/04/27 Python
python通过ftplib登录到ftp服务器的方法
2015/05/08 Python
python 安装virtualenv和virtualenvwrapper的方法
2017/01/13 Python
利用python画一颗心的方法示例
2017/01/31 Python
Python实现PS图像明亮度调整效果示例
2018/01/23 Python
tensorflow学习教程之文本分类详析
2018/08/07 Python
python实现简易版学生成绩管理系统
2020/06/22 Python
Python实现对word文档添加密码去除密码的示例代码
2020/12/29 Python
用JAVA实现一种排序,JAVA类实现序列化的方法(二种)
2014/04/23 面试题
公务员培训心得体会
2013/12/28 职场文书
关于做家务的心得体会
2016/01/23 职场文书
高中班主任寄语
2019/06/21 职场文书
解决Goland 同一个package中函数互相调用的问题
2021/05/06 Golang
解决pytorch-gpu 安装失败的记录
2021/05/24 Python
探讨Java中的深浅拷贝问题
2021/06/26 Java/Android
解决Mysql的left join无效及使用的注意事项说明
2021/07/01 MySQL
Redis调用Lua脚本及使用场景快速掌握
2022/03/16 Redis