php使用curl模拟多线程实现批处理功能示例
本文实例讲述了php使用curl模拟多线程实现批处理功能。分享给大家供大家参考,具体如下:
php模拟多线程用到curl库,这个库很强大,可以做好多事,比如模拟登陆,文件上传/下载,数据采集等。
下面是我的代码,很简单,有些还功能还不会用。
<?php $node_urls=array('http://www.baidu.com','http://www.google.com.hk'); $ch=array(); $mh=curl_multi_init(); $ch[0]=curl_init($node_urls[0]); $ch[1]=curl_init($node_urls[1]); for($i=0;$i<2;$i++) { curl_setopt($ch[$i],CURLOPT_RETURNTRANSFER,1); curl_multi_add_handle($mh,$ch[$i]); } $running=NULL; do{ usleep(10000); curl_multi_exec($mh,$running); }while($running>0); $res=array(); for($j=0;$j<2;$j++) { $res[$j]=curl_multi_getcontent($ch[$j]); } for($k=0;$k<2;$k++) { curl_multi_remove_handle($mh,$ch[$k]); } curl_multi_close($mh); print_r($res); ?>
这段代码就是并行爬取百度和谷歌的代码,以后再慢慢完善。
还有好多事要做。
更多关于PHP相关内容感兴趣的读者可查看本站专题:《php curl用法总结》、《PHP网络编程技巧总结》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》、《PHP数据结构与算法教程》及《PHP中json格式数据操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。
相关推荐
-
php使用curl_init()和curl_multi_init()多线程的速度比较详解
本文实例讲述了php使用curl_init()和curl_multi_init()多线程的速度比较.分享给大家供大家参考,具体如下: php中curl_init()的作用很大,尤其是在抓取网页内容或文件信息的时候,例如之前文章<php使用curl获取header检测开启GZip压缩>就介绍到curl_init()的强大. curl_init()处理事物是单线程模式,如果需要对事务处理走多线程模式,那么php里提供了一个函数curl_multi_init()给我们,这就是多线程模式处理事务的函数
-
PHP curl批处理及多请求并发实现方法分析
本文实例讲述了PHP curl批处理及多请求并发实现方法.分享给大家供大家参考,具体如下: 在面试过程中遇到一个问题,加入一个一个网站访问一次需要两秒,我们如何实现在2秒左右请求三次? 面试官想问的就是如何使用curl并发处理请求 关于curl_multi_init() 一般来说,想到要用curl_multi_init()时,目的是要同时请求多个url,而不是一个一个依次请求,否则就要curl_init()了. 不过,在使用curl_multi的时候,你可能遇到cpu消耗过高.网页假死等现象,可
-
浅谈php使用curl模拟多线程发送请求
每个PHP文件的执行是单线程的,但是php本身也可以用一些别的技术实现多线程并发比如用php-fpm进程,这里用curl模拟多线程发送请求.php的curl多线程是通过不断调用curl_multi_exec来获取内容,这里举一个demo来模拟一次curl多线程并发操作. //设置缓冲为0(也可以去php.ini设置) ini_set('output_buffering', 0); //打开输出缓冲区 ob_start(); //设置一个空数组 $curl_Arr=[]; //这里模拟20次请求
-
PHP CURL 多线程操作代码实例
使用方法: $urls = array("http://baidu.com", "http://21andy.com", "http://google.com"); $mp = new MultiHttpRequest($urls); $mp->start(); /* * Curl 多线程类 * 使用方法: * ======================== $urls = array("http://baidu.com&quo
-
php中foreach结合curl实现多线程的方法分析
本文实例讲述了php中foreach结合curl实现多线程的方法.分享给大家供大家参考,具体如下: 多线程是php不支持的但我们可以通过foreach来伪多线程了,但这个伪多线程速度不一定比单线程要单到哪里去了,具体来看个例子. 在利用foreach语句循环图片URL,并通过CURL将所有图片进行本地保存的函数时,出现了只能采集到一个的问题,现将foreach和CURL结合进行多URL请求的方法进行下总结. 方法1:循环请求 $sr=array(url_1,url_2,url_3); forea
-
PHP使用CURL实现多线程抓取网页
PHP 利用 Curl Functions 可以完成各种传送文件操作,比如模拟浏览器发送GET,POST请求等等,受限于php语言本身不支持多线程,所以开发爬虫程序效率并不高,这时候往往需 要借助Curl Multi Functions 它可以实现并发多线程的访问多个url地址.既然 Curl Multi Function如此强大,能否用 Curl Multi Functions 来写并发多线程下载文件呢,当然可以,下面给出我的代码: 代码1:将获得的代码直接写入某个文件 <?php $urls
-
php结合curl实现多线程抓取
php结合curl实现多线程抓取 <?php /* curl 多线程抓取 */ /** * curl 多线程 * * @param array $array 并行网址 * @param int $timeout 超时时间 * @return array */ function Curl_http($array,$timeout){ $res = array(); $mh = curl_multi_init();//创建多个curl语柄 $startime = getmicrotime(); fo
-
php curl批处理实现可控并发异步操作示例
本文实例讲述了php curl批处理实现可控并发异步操作.分享给大家供大家参考,具体如下: 通常情况下 PHP 中的 cURL 是阻塞运行的,就是说创建一个 cURL 请求以后必须等它执行成功或者超时才会执行下一个请求:API接口访问一般会首选CURL 在实际项目或者自己编写小工具(比如新闻聚合,商品价格监控,比价)的过程中, 通常需要从第3方网站或者API接口获取数据, 在需要处理1个URL队列时, 为了提高性能, 可以采用cURL提供的curl_multi_*族函数实现简单的并发. <?ph
-
PHP使用CURL_MULTI实现多线程采集的例子
这两天有一客户定制了一个免登录发布模块,因为在模块中需要涉及到很多图片下载的问题,考虑到性能问题,所以特别写了一个CURL_MULTI远程采集网页的函数,以方便以后使用,估计以后都不会使用原来的单线程curl函数去foreach了,其性能对比很明显的.同样获取我的博客的十个不同网页,curl_multi:4.5246081352234,file_get_contents:33.001797914505,将近8倍的效率,可想而知,如果在附件更多的情况下,性能差异就越明显了,希望对您有所帮助! 复制
-
PHP中使用CURL发送get/post请求上传图片批处理功能
cURL是利用url语法规定传输文件和数据的工具.php中有curl拓展,一般用来实现网络抓取,模拟发送get post请求,文件上传. 在php中建立curl的基本步骤如下: 1.初始化 2. 设置选项,包括url 3. 执行并获取结果 4. 释放curl句柄. 在工作和学习中,我也是时常用的curl.由于在使用curl设置选项时,各种选项比较难以记忆,需要参考,故在此记录下常用的一些例子,以便后来参考. 实例一 : 抓取网页数据(以拉手网开放api为例,也是get请求) <?php
-
PHP Curl多线程原理实例详解
给各位介绍一下Curl多线程实例与原理.不对之处请指教相信许多人对php手册中语焉不详的curl_multi一族的函数头疼不已,它们文档少,给的例子 更是简单的让你无从借鉴,我也曾经找了许多网页,都没见一个完整的应用例子.curl_multi_add_handle curl_multi_close curl_multi_exec curl_multi_getcontent curl_multi_info_read curl_multi_init curl_multi_remove_handle
随机推荐
- 浅谈mint-ui 填坑之路
- 华为学习文档资料
- 批处理文件(bat文件)注册dll批量注册dll
- Xcode8打印一堆log问题的快速解决方法
- PHP中对数组的一些常用的增、删、插操作函数总结
- 随机头像PHP版
- C/C++ 编译器优化介绍
- 前端设计师们最常用的JS代码汇总
- nodejs redis 发布订阅机制封装实现方法及实例代码
- Python矩阵常见运算操作实例总结
- mongodb 常见问题处理方法收集
- sqlserver not in 语句使程充崩溃
- jQuery 操作option的实现代码
- 定义select的边框颜色
- js下将字符串当函数执行的方法
- Java连接并操作Sedna XML数据库的方法
- Java通过Fork/Join优化并行计算
- 深入IComparable与IComparer的排序实例详解
- 23种设计模式(9) java桥接模式
- python opencv之SIFT算法示例