当前位置: 首页 > 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数组功能示例
  • [LeetCode] Wiggle Sort
  • 10个最佳ES6特性 ES7与ES8的特性
  • 2017-09-12 前端日报
  • Javascript 原型链
  • JS进阶 - JS 、JS-Web-API与DOM、BOM
  • js学习笔记
  • Phpstorm怎样批量删除空行?
  • python学习笔记-类对象的信息
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • vue 配置sass、scss全局变量
  • 测试如何在敏捷团队中工作?
  • 从零开始的webpack生活-0x009:FilesLoader装载文件
  • 工作中总结前端开发流程--vue项目
  • 如何借助 NoSQL 提高 JPA 应用性能
  • 为什么要用IPython/Jupyter?
  • 一个项目push到多个远程Git仓库
  • 移动端 h5开发相关内容总结(三)
  • [Shell 脚本] 备份网站文件至OSS服务(纯shell脚本无sdk) ...
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • ​MySQL主从复制一致性检测
  • #define,static,const,三种常量的区别
  • #QT(TCP网络编程-服务端)
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
  • (1) caustics\
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (3)(3.5) 遥测无线电区域条例
  • (Mac上)使用Python进行matplotlib 画图时,中文显示不出来
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
  • ***微信公众号支付+微信H5支付+微信扫码支付+小程序支付+APP微信支付解决方案总结...
  • .NET CF命令行调试器MDbg入门(三) 进程控制
  • .NET中GET与SET的用法
  • ?.的用法
  • [Android]使用Android打包Unity工程
  • [autojs]逍遥模拟器和vscode对接
  • [BZOJ1089][SCOI2003]严格n元树(递推+高精度)
  • [DEBUG] spring boot-如何处理链接中的空格等特殊字符
  • [Delphi]一个功能完备的国密SM4类(TSM4)[20230329更新]
  • [echarts] y轴不显示0
  • [Hadoop in China 2011] 蒋建平:探秘基于Hadoop的华为共有云