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);  
原文地址:https://www.cnblogs.com/wenxinphp/p/8556841.html