php中foreach结合curl实现多线程的方法分析


Posted in PHP onSeptember 22, 2016

本文实例讲述了php中foreach结合curl实现多线程的方法。分享给大家供大家参考,具体如下:

多线程是php不支持的但我们可以通过foreach来伪多线程了,但这个伪多线程速度不一定比单线程要单到哪里去了,具体来看个例子.

在利用foreach语句循环图片URL,并通过CURL将所有图片进行本地保存的函数时,出现了只能采集到一个的问题,现将foreach和CURL结合进行多URL请求的方法进行下总结.

方法1:循环请求

$sr=array(url_1,url_2,url_3);
foreach ($sr as $k=>$v) {
 $curlPost=$v.'?f=传入参数';
 $ch = curl_init($curlPost) ;
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true) ; // 获取数据返回
 curl_setopt($ch, CURLOPT_BINARYTRANSFER, true) ; // 在启用 CURLOPT_RETURNTRANSFER 时候将获取数据返回
 $data = curl_exec($ch) ;
 echo $k.'##:'.$data.'<br>';
}
curl_close($ch);

上面代码需要特别注意的是,curl_close 一定要放在foreach循环结束的外面,如果放在里面的话,就会出现我上面提到的多个IMGURL,只能采集到一个URL的问题.

方法2:多线程循环

<?php
multi_threads_request($nodes){
  $mh = curl_multi_init();
  $curl_array = array();
  foreach($nodes as $i => $url)
  {
   $curl_array[$i] = curl_init($url);
   curl_setopt($curl_array[$i], CURLOPT_RETURNTRANSFER, true);
   curl_multi_add_handle($mh, $curl_array[$i]);
  }
  $running = NULL;
  do {
   usleep(10000);
   curl_multi_exec($mh,$running);
  } while($running > 0);
  $res = array();
  foreach($nodes as $i => $url)
  {
   $res[$url] = curl_multi_getcontent($curl_array[$i]);
  }
  foreach($nodes as $i => $url){
   curl_multi_remove_handle($mh, $curl_array[$i]);
  }
  curl_multi_close($mh);
  return $res;
}
print_r(multi_threads_request(array(
 'https://3water.com',
 'http://tools.3water.com',
));

这里主要利用curl_multi_init()实现多个url 的请求,不过由于php自身并不支持多线程,所以伪多线程速度也不见得会比单线程快.

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
多重?l件?合查?(二)
Oct 09 PHP
PHP+AJAX实现无刷新注册(带用户名实时检测)
Dec 02 PHP
php面向对象全攻略 (七) 继承性
Sep 30 PHP
php创建session的方法实例详解
Jan 27 PHP
php使用APC实现实时上传进度条功能
Oct 26 PHP
使用PHP如何实现高效安全的ftp服务器(二)
Dec 30 PHP
基于PHP实现简单的随机抽奖小程序
Jan 05 PHP
mac系统下为 php 添加 pcntl 扩展
Aug 28 PHP
php获取指定数量随机字符串的方法
Feb 06 PHP
Laravel中Facade的加载过程与原理详解
Sep 22 PHP
Swoole源码中如何查询Websocket的连接问题详解
Aug 30 PHP
PHP实现上一篇下一篇的方法实例总结
Sep 22 #PHP
php微信公众平台配置接口开发程序
Sep 22 #PHP
PHP使用星号隐藏用户名,手机和邮箱的实现方法
Sep 22 #PHP
php中二分法查找算法实例分析
Sep 22 #PHP
Yii2中SqlDataProvider用法示例
Sep 22 #PHP
php实现压缩合并js的方法【附demo源码下载】
Sep 22 #PHP
php简单压缩css样式示例
Sep 22 #PHP
You might like
浅谈PHP与C#的值类型指向区别的详解
2013/05/21 PHP
php实现mysql数据库操作类分享
2014/02/14 PHP
Netbeans 8.2将支持PHP7 更精彩
2016/06/13 PHP
phpstorm最新激活码分享亲测phpstorm2020.2.3版可用
2020/11/22 PHP
javascript 进阶篇3 Ajax 、JSON、 Prototype介绍
2012/03/14 Javascript
jquery中通过父级查找进行定位示例
2013/06/28 Javascript
js脚本实现数据去重
2014/11/27 Javascript
JavaScript学习小结(一)——JavaScript入门基础
2015/09/02 Javascript
js获取新浪天气接口的实现代码
2016/06/06 Javascript
BootStrap中jQuery插件Carousel实现轮播广告效果
2017/03/27 jQuery
ES6新特性之字符串的扩展实例分析
2017/04/01 Javascript
基于Vue.js实现tab滑块效果
2017/07/23 Javascript
bootstrap table实现x-editable的行单元格编辑及解决数据Empty和支持多样式问题
2017/08/10 Javascript
浅谈angular2 组件的生命周期钩子
2017/08/12 Javascript
nodeJS进程管理器pm2的使用
2019/01/09 NodeJs
vue与bootstrap实现简单用户信息添加删除功能
2019/02/15 Javascript
简单了解vue中的v-if和v-show的区别
2019/10/08 Javascript
Python实现简单过滤文本段的方法
2017/05/24 Python
Python之reload流程实例代码解析
2018/01/29 Python
python 调试冷知识(小结)
2019/11/11 Python
TensorFlow获取加载模型中的全部张量名称代码
2020/02/11 Python
浅谈Pycharm的项目文件名是红色的原因及解决方式
2020/06/01 Python
解决keras,val_categorical_accuracy:,0.0000e+00问题
2020/07/02 Python
python3 kubernetes api的使用示例
2021/01/12 Python
ONLY德国官方在线商店:购买时尚女装
2017/09/21 全球购物
初一地理教学反思
2014/01/16 职场文书
体育课课后反思
2014/04/24 职场文书
学校读书活动总结
2014/06/30 职场文书
毕业生应聘求职信
2014/07/10 职场文书
新兵入伍心得体会
2014/09/04 职场文书
群众路线教育实践活动批评与自我批评
2014/09/15 职场文书
离婚协议书范本2014
2014/10/27 职场文书
中学生思想品德评语
2014/12/31 职场文书
2015年教导处教学工作总结
2015/07/22 职场文书
nginx负载功能+nfs服务器功能解析
2022/02/28 Servers
MySQL约束(创建表时的各种条件说明)
2022/06/21 MySQL