多线程是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.'
';

}

curl_close($ch);

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

方法2:多线程循环

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(

'http://www.jquerycn.cn',

'http://qq.jquerycn.cn',

));

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

php多线程foreach,php中foreach curl实现多线程例子相关推荐

  1. php foreach嵌套foreach,php中foreach怎么嵌套foreach PHP中foreach函数用法?

    foreach的使用方法小编不是很明确,分享达人指教一下.foreach (array_expressforeach($array as $key) { if(xxxx) { break; //bre ...

  2. php输出学生成绩foreach,PHP中foreach输出值不正确

    需要达成在一个页面a.html输入成绩或是学号传递给另一个php文件b.php查询对应的学号或是成绩. 从一个网页向该文件传递学生学号stuNum,成绩grade,隐藏表单的标记flag b.php代 ...

  3. python 多线程 类_Python中如何自定义一个多线程类呢?

    摘要: 下文讲述Python中自定义一个多线程类的方法分享,如下所示: 实现思路: 1.定义一个类继承threading.Thread 2.在自定义类中构造函数重写run方法 例: Python3中自 ...

  4. python如何使用多线程_Python 类中的方法如何多线程调用?

    这么写直接弹框报python运行出错,/尴尬,那这个怎么多线程调用getA/getB/getC/getD/getE呢?每次传参还要循环个arg2list列表 class ThreadTest(): d ...

  5. php curl 模拟多线程,php利用curl 多线程 模拟 并发的详解

    php利用curl 多线程 模拟 并发的详解 发布于 2014-12-07 10:17:25 | 265 次阅读 | 评论: 0 | 来源: 网友投递 PHP开源脚本语言PHP(外文名: Hypert ...

  6. php foreach是什么,php中foreach的用法是什么

    php中foreach的用法是:[foreach ($array as $value) {要执行代码;}],每进行一次循环,当前数组元素的值就会被赋值给$value变量,在进行下一次循环时,将得到数组 ...

  7. 如何确定foreach循环中的第一次和最后一次迭代?

    问题很简单. 我的代码中有一个foreach循环: foreach($array as $element) {//code } 在这个循环中,我想在第一次或最后一次迭代时做出不同的反应. 这该怎么做? ...

  8. js数组中forEach/some/every/map/filter/reduce的区别

    2019独角兽企业重金招聘Python工程师标准>>> // js数组中forEach/some/every/map/filter/reduce的区别// 1. foreach:就是 ...

  9. 原生php使用foreach,如何使用php中foreach()

    如何使用php中foreach() 发布时间:2020-07-28 09:51:21 来源:亿速云 阅读:91 作者:Leah 本篇文章给大家分享的是有关如何使用php中foreach(),小编觉得挺 ...

最新文章

  1. 在QTP中申明XPath
  2. 华为秘密作战计划曝光,重注研发AI芯片挑战英伟达,轮值董事长挂帅
  3. C#中一些易混淆概念总结--------数据类型存储位置,方法调用,out和ref参数的使用...
  4. torch.nn.BCELoss are unsafe to autocast
  5. 动手为王 | Oracle 数据库跨版本升级迁移实践
  6. [读书笔记] - 《深度探索C++对象模型》第3章 Data语意学
  7. python自动压图贴图到Excel小工具
  8. fatal: HttpRequestException encountered (附:网盘下载地址)
  9. 第六章 jQuery中的Ajax应用
  10. 抽奖滚动文字如何透明地覆盖在动态视频背景上?-活动现场双屏管理系统操作提示
  11. 【语料库】语料库资源汇总
  12. mpdf配置自定义字体
  13. 【转】Java线程池实现原理及其在美团业务中的实践
  14. liunx机器开放8080端口
  15. H5 简单实现微信公众号摇一摇功能
  16. pgsql之Comment命令
  17. zabbix 参数 脚本_zabbix 自定义脚本短信报警
  18. uniapp小程序src引用服务器图片时全局变量与图片路径拼接
  19. [置顶]我的2011体会--不是每个程序员都是适合创业,即使你工作了十年
  20. [收藏|转贴]货币金额大写转换库(C#)

热门文章

  1. MySQL 5.6.11 GA 发布
  2. js代码(经典+有用+常用)
  3. 深入理解pts,dts,time_base
  4. YOLOX——Win10下训练自定义VOC数据集
  5. POI异步导入Excel兼容xsl和xlsx
  6. 端口映射的几种实现方法
  7. 如何选择 Git 分支模式?
  8. 面试官再问高并发,求你把这篇发给他!
  9. Java 类中可以覆盖静态方法吗?
  10. 用Java语言,写一个植物大战僵尸简易版!