2012-03-19 5 views
1

このCurlコードをテストして複数のページを同時にダウンロードしました。curlを使用して一度にいくつの最大URLをダウンロードできますか

<?php 
class Footo_Content_Retrieve_HTTP_CURLParallel 
{ 
    /** 
    * Fetch a collection of URLs in parallell using cURL. The results are 
    * returned as an associative array, with the URLs as the key and the 
    * content of the URLs as the value. 
    * 
    * @param array<string> $addresses An array of URLs to fetch. 
    * @return array<string> The content of each URL that we've been asked to fetch. 
    **/ 
    public function retrieve($addresses) 
    { 
     $multiHandle = curl_multi_init(); 
     $handles = array(); 
     $results = array(); 

     foreach($addresses as $url) 
     { 
      $handle = curl_init($url); 
      $handles[$url] = $handle; 

      curl_setopt_array($handle, array(
       CURLOPT_HEADER => false, 
       CURLOPT_RETURNTRANSFER => true, 
      )); 

      curl_multi_add_handle($multiHandle, $handle); 
     } 

     // execute the handles 
     $result = CURLM_CALL_MULTI_PERFORM; 
     $running = false; 

     // set up and make any requests.. 
     while ($result == CURLM_CALL_MULTI_PERFORM) 
     { 
      $result = curl_multi_exec($multiHandle, $running); 
     } 

     // wait until data arrives on all sockets 
     while($running && ($result == CURLM_OK)) 
     { 
      if (curl_multi_select($multiHandle) > -1) 
      { 
       $result = CURLM_CALL_MULTI_PERFORM; 

       // while we need to process sockets 
       while ($result == CURLM_CALL_MULTI_PERFORM) 
       { 
        $result = curl_multi_exec($multiHandle, $running); 
       } 
      } 
     } 

     // clean up 
     foreach($handles as $url => $handle) 
     { 
      $results[$url] = curl_multi_getcontent($handle); 

      curl_multi_remove_handle($multiHandle, $handle); 
      curl_close($handle); 
     } 

     curl_multi_close($multiHandle); 

     return $results; 
    } 
} 

オリジナルソース:しかし、私は同時ダウンロードの最大許容限度があれば何であるかを知りたい

http://css.dzone.com/articles/retrieving-urls-parallel-curl

答えて

0

制限なしていますが、サーバー上のインターネットの接続を考慮しなければなりません、メモリリーク、CPUなど

+0

Windows7やLinuxなどのOSで最大限のhttp接続制限が自動的に処理されることを意味しますか? – user774250

+0

はい、CURL独自の制限はありません – safarov

+0

ある言葉であなたのカール数を実行する必要がある場合は、いくつかの深刻なホスティング力が必要になります。 – Eamonn