PHP多线程、与For循环,抓取百度搜索页面的PHP代码示例个解

  1. <?php  

  2.   class test_thread_run extends Thread   

  3.   {  

  4.       public $url;  

  5.       public $data;  

  6.   

  7.       public function __construct($url)  

  8.       {  

  9.           $this->url = $url;  

  10.       }  

  11.   

  12.       public function run()  

  13.       {  

  14.           if(($url = $this->url))  

  15.           {  

  16.               $this->data = model_http_curl_get($url);  

  17.           }  

  18.       }  

  19.   }  

  20.   

  21.   function model_thread_result_get($urls_array)   

  22.   {  

  23.       foreach ($urls_array as $key => $value)   

  24.       {  

  25.           $thread_array[$key] = new test_thread_run($value["url"]);  

  26.           $thread_array[$key]->start();  

  27.       }  

  28.   

  29.       foreach ($thread_array as $thread_array_key => $thread_array_value)   

  30.       {  

  31.           while($thread_array[$thread_array_key]->isRunning())  

  32.           {  

  33.               usleep(10);  

  34.           }  

  35.           if($thread_array[$thread_array_key]->join())  

  36.           {  

  37.               $variable_data[$thread_array_key] = $thread_array[$thread_array_key]->data;  

  38.           }  

  39.       }  

  40.       return $variable_data;  

  41.   }  

  42.   

  43.   function model_http_curl_get($url,$userAgent="")   

  44.   {  

  45.       $userAgent = $userAgent ? $userAgent : 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2)';   

  46.       $curl = curl_init();  

  47.       curl_setopt($curl, CURLOPT_URL, $url);  

  48.       curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);  

  49.       curl_setopt($curl, CURLOPT_TIMEOUT, 5);  

  50.       curl_setopt($curl, CURLOPT_USERAGENT, $userAgent);  

  51.       $result = curl_exec($curl);  

  52.       curl_close($curl);  

  53.       return $result;  

  54.   }  

  55.   

  56.   for ($i=0; $i < 100; $i++)   

  57.   {   

  58.       $urls_array[] = array("name" => "baidu""url" => "http://www.baidu.com/s?wd=".mt_rand(10000,20000));  

  59.   }  

  60.   

  61.   $t = microtime(true);  

  62.   $result = model_thread_result_get($urls_array);  

  63.   $e = microtime(true);  

  64.   echo "多线程:".($e-$t)."\n";  

  65.   

  66.   $t = microtime(true);  

  67.   foreach ($urls_array as $key => $value)   

  68.   {  

  69.       $result_new[$key] = model_http_curl_get($value["url"]);  

  70.   }  

  71.   $e = microtime(true);  

  72.   echo "For循环:".($e-$t)."\n";  

  73. ?> 


你可能感兴趣的:(PHP多线程、与For循环,抓取百度搜索页面的PHP代码示例个解)