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 相关文章推荐
PHP中输出转义JavaScript代码的实现代码
Apr 22 PHP
浅析PHP绘图技术
Jul 03 PHP
JS异常处理try..catch语句的作用和实例
May 05 PHP
php判断输入是否是纯数字,英文,汉字的方法
Mar 05 PHP
php判断用户是否手机访问代码
Jun 08 PHP
浅谈PDO的rowCount函数
Jun 18 PHP
PHP中把对象数组转换成普通数组的方法
Jul 10 PHP
yii2.0实现验证用户名与邮箱功能
Dec 22 PHP
[原创]CI(CodeIgniter)简单统计访问人数实现方法
Jan 19 PHP
Zend Framework入门教程之Zend_Registry组件用法详解
Dec 09 PHP
php实现遍历文件夹的方法汇总
Mar 02 PHP
原生PHP实现导出csv格式Excel文件的方法示例【附源码下载】
Mar 07 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将向Java靠拢
2006/10/09 PHP
全新Mac配置PHP开发环境教程
2016/02/03 PHP
Javascript实现的分页函数
2007/02/07 Javascript
js实现在字符串中提取数字
2013/11/05 Javascript
JQuery的ready函数与JS的onload的区别详解
2013/11/21 Javascript
多选列表框动态添加,移动,删除,全选等操作的简单实例
2014/01/13 Javascript
jQuery on()方法绑定动态元素的点击事件无响应的解决办法
2016/07/07 Javascript
JavaScript面向对象精要(上部)
2017/09/12 Javascript
详解解决使用axios发送json后台接收不到的问题
2018/06/27 Javascript
vue+iview 兼容IE11浏览器的实现方法
2019/01/07 Javascript
微信小程序非跳转式组件授权登录的方法示例
2019/05/22 Javascript
vue中利用Promise封装jsonp并调取数据
2019/06/18 Javascript
Vue-cli3.x + axios 跨域方案踩坑指北
2019/07/04 Javascript
react用Redux中央仓库实现一个todolist
2019/09/29 Javascript
vue+vant使用图片预览功能ImagePreview的问题解决
2020/04/10 Javascript
python+matplotlib绘制饼图散点图实例代码
2018/01/20 Python
python3+PyQt5实现柱状图
2018/04/24 Python
Python3实现的简单工资管理系统示例
2019/03/12 Python
python中的协程深入理解
2019/06/10 Python
Django用户认证系统 User对象解析
2019/08/02 Python
python实现截取屏幕保存文件,删除N天前截图的例子
2019/08/27 Python
Python 中Operator模块的使用
2021/01/30 Python
微软台湾官方网站:Microsoft台湾
2018/08/15 全球购物
设计总监岗位职责
2013/12/07 职场文书
公司培训欢迎词
2014/01/10 职场文书
食品采购员岗位职责
2014/04/14 职场文书
解放思想大讨论活动心得体会
2014/09/11 职场文书
街道党工委党的群众路线教育实践活动对照检查材料思想汇报
2014/10/05 职场文书
五好家庭事迹材料
2014/12/20 职场文书
邀请书格式范文
2015/02/02 职场文书
让生命充满爱观后感
2015/06/08 职场文书
监守自盗观后感
2015/06/10 职场文书
奖学金申请个人主要事迹材料
2015/11/04 职场文书
高效课堂教学反思
2016/02/24 职场文书
HTML速写之Emmet语法规则的实现
2021/04/07 HTML / CSS
MySql子查询IN的执行和优化的实现
2021/08/02 MySQL