博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP 多线程采集
阅读量:5107 次
发布时间:2019-06-13

本文共 1802 字,大约阅读时间需要 6 分钟。

  1. function curl_multi($urls) {  
  2.     if (!is_array($urls) or count($urls) == 0) {  
  3.         return false;  
  4.     }   
  5.     $num=count($urls);  
  6.     $curl = $curl2 = $text = array();  
  7.     $handle = curl_multi_init();  
  8.     function createCh($url) {  
  9.         $ch = curl_init();  
  10.         curl_setopt ($ch, CURLOPT_URL, $url);  
  11.         curl_setopt ($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko');//设置头部  
  12.         curl_setopt ($ch, CURLOPT_REFERER, $url); //设置来源  
  13.         curl_setopt ($ch, CURLOPT_ENCODING, "gzip"); // 编码压缩  
  14.         curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);  
  15.         curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1);//是否采集301、302之后的页面  
  16.         curl_setopt ($ch, CURLOPT_MAXREDIRS, 5);//查找次数,防止查找太深  
  17.         curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); // 对认证证书来源的检查  
  18.         curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); // 从证书中检查SSL加密算法是否存在         
  19.         curl_setopt ($ch, CURLOPT_TIMEOUT, 20);  
  20.         curl_setopt ($ch, CURLOPT_HEADER, 0);//输出头部  
  21.         return $ch;  
  22.     }  
  23.     foreach($urls as $k=>$v){  
  24.         $url=$urls[$k];  
  25.         $curl[$k] = createCh($url);  
  26.         curl_multi_add_handle ($handle,$curl[$k]);  
  27.     }  
  28.     $active = null;  
  29.     do {  
  30.         $mrc = curl_multi_exec($handle, $active);  
  31.     } while ($mrc == CURLM_CALL_MULTI_PERFORM);  
  32.   
  33.     while ($active && $mrc == CURLM_OK) {  
  34.         if (curl_multi_select($handle) != -1) {  
  35.             usleep(100);  
  36.         }  
  37.         do {  
  38.             $mrc = curl_multi_exec($handle, $active);  
  39.         } while ($mrc == CURLM_CALL_MULTI_PERFORM);  
  40.     }   
  41.   
  42.     foreach ($curl as $k => $v) {  
  43.         if (curl_error($curl[$k]) == "") {  
  44.             $text[$k] = (string) curl_multi_getcontent($curl[$k]);   
  45.         }  
  46.         curl_multi_remove_handle($handle, $curl[$k]);  
  47.         curl_close($curl[$k]);  
  48.     }   
  49.     curl_multi_close($handle);  
  50.     return $text;  
  51. }  
  52. $urls=array('http://www.baidu.com',  
  53.             'http://www.baidu.com',  
  54.             'http://www.baidu.com',  
  55.             'http://www.baidu.com',  
  56.             'http://www.baidu.com',  
  57.             'http://www.baidu.com',  
  58.             'http://www.baidu.com',  
  59.             'http://www.baidu.com'  
  60.             );  
  61. $res=curl_multi($urls);  
  62. print_r($res);  

转载于:https://www.cnblogs.com/wenxinphp/p/8556841.html

你可能感兴趣的文章
软件包的使用
查看>>
linux中启动与终止lnmp的脚本
查看>>
gdb中信号的处理[转]
查看>>
学习Javascript闭包(Closure)
查看>>
LeetCode【709. 转换成小写字母】
查看>>
如何在Access2007中使用日期类型查询数据
查看>>
Jzoj4757 树上摩托
查看>>
CF992E Nastya and King-Shamans(线段树二分+思维)
查看>>
基于docker的spark-hadoop分布式集群之一: 环境搭建
查看>>
oracle 几个时间函数探究
查看>>
第一个Java Web程序
查看>>
Atomic
查看>>
div 显示滚动条与div显示隐藏的CSS代码
查看>>
Redis-1-安装
查看>>
Access denied for user ''@'localhost' to database 'mysql'
查看>>
部署支持 https 的 Nginx 服务
查看>>
WebAssembly是什么?
查看>>
树状数组_一维
查看>>
如果没有按照正常的先装iis后装.net的顺序,可以使用此命令重新注册一下:
查看>>
linux install ftp server
查看>>