当前位置: 首页 > news >正文

php 多线程处理_PHP CURL 多线程操作代码实例

/*

* 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 自定义函数实现将数据 以excel 表格形式导出示例...
  • nodejs与php混合,php与nodejs的加密数据互通
  • php参数特殊字符,PHP中URL中特殊字符引起的问题(+,=) 分析及解决方法
  • php 鼠标点击其他区域下拉框隐藏,jQuery除指定区域外点击任何地方隐藏DIV功能...
  • java 日期转换星期,关于JAVA的小工具(日期转周几)
  • PHP的经典程序,几款经典php分页程序(1/4)
  • java gzip加解秘,vue 基于pako.js实现gzip的压缩和解压功能
  • matlab每一行白点个数,MATLAB 简单的计算白色轮廓中像素点的个数
  • java 类共享变量,Java提供了ThreadLocal(java.lang)类,实现线程内共享变量
  • Java第三方语音包发声,JDK中的包和他们的基本功能
  • python mock数据,python学习开发mock接口
  • php syslog 514,syslog详解及配置远程发送日志和远程日志分类
  • 兰春 MySQL,MySQL中经典的too many connection怎么破
  • php后台处理传来的图片文件,如何处理展示后台程序实时生成的文件?
  • php遍历json键值对,JS实现键值对遍历json数组功能示例
  • C++11: atomic 头文件
  • JAVA并发编程--1.基础概念
  • LintCode 31. partitionArray 数组划分
  • Linux链接文件
  • python3 使用 asyncio 代替线程
  • Solarized Scheme
  • SpiderData 2019年2月13日 DApp数据排行榜
  • springMvc学习笔记(2)
  • SQLServer之创建显式事务
  • Vue2.x学习三:事件处理生命周期钩子
  • vue-router的history模式发布配置
  • 阿里云爬虫风险管理产品商业化,为云端流量保驾护航
  • 飞驰在Mesos的涡轮引擎上
  • 关于 Linux 进程的 UID、EUID、GID 和 EGID
  • 基于axios的vue插件,让http请求更简单
  • 解析 Webpack中import、require、按需加载的执行过程
  • 聊聊sentinel的DegradeSlot
  • 判断客户端类型,Android,iOS,PC
  • Java总结 - String - 这篇请使劲喷我
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • 机器人开始自主学习,是人类福祉,还是定时炸弹? ...
  • #pragma multi_compile #pragma shader_feature
  • #快捷键# 大学四年我常用的软件快捷键大全,教你成为电脑高手!!
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (day 12)JavaScript学习笔记(数组3)
  • (备忘)Java Map 遍历
  • (三十五)大数据实战——Superset可视化平台搭建
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (一)WLAN定义和基本架构转
  • (转)PlayerPrefs在Windows下存到哪里去了?
  • .NET Micro Framework初体验(二)
  • .NET 设计模式初探
  • .net开源工作流引擎ccflow表单数据返回值Pop分组模式和表格模式对比
  • .NET下的多线程编程—1-线程机制概述
  • [ C++ ] 继承
  • [2019.3.5]BZOJ1934 [Shoi2007]Vote 善意的投票
  • [2021ICPC济南 L] Strange Series (Bell 数 多项式exp)
  • [22]. 括号生成
  • [Angular] 笔记 18:Angular Router
  • [BSGS算法]纯水斐波那契数列