zoukankan      html  css  js  c++  java
  • PHP 多线程采集

    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);  
  • 相关阅读:
    [笔记].怎样给μC/OSII的任务传递参数
    [原创].怎样在WPS上实现代码语法高亮
    [笔记].Nios II 9.1的sys/alt_irq.h与之前版本的区别
    [原创].使用Nios II 9.1中的Flash Programmer无法固化程序到EPCS上
    [笔记].浅析在Nios II中的两种寄存器映射方法的异同
    [原创].怎样在Nios II上跑μC/OSII
    [转载].基于Nios II的DMA传输
    [转载].SSRAM、SDRAM和Flash简要介绍
    [笔记].一种独立键盘消抖的Verilog写法
    [笔记].I2C札记
  • 原文地址:https://www.cnblogs.com/wenxinphp/p/8556841.html
Copyright © 2011-2022 走看看