龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > php编程 >

使用 PHP 和 cURL 获取 URLs

时间:2014-07-22 14:51来源: 作者: 点击:
分享到:
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;
    }
}

2. [文件] Footo_Content_Retrieve_HTTP_CURLParallel.php.gz ~ 752B     下载(21)     [全屏预览]

精彩图集

赞助商链接