使用 PHP 和 cURL 获取 URLs
http://css.dzone.com/articles/retrieving-urls-parallel-curlbr /
http://css.dzone.com/articles/retrieving-urls-parallel-curl
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; } }
- 上一篇:mysql的行锁的另一种解决方案
- 下一篇:万年历
精彩图集
精彩文章