Мультизапрос

Существуют задачи в которых нужно выполнить много запросов к сайту и получить контент. Обычная функция file_get_contents() будет очень долго отрабатывать, если в цикле будет 10 запросов.

Данная функция существенно ускоряет скорость обработки запросов. Она принимает массив ссылок. И возвращает содержимое страницы.

function multi_request($urls = null)
    {
        $curly = array();
        $result = array();
        $mh = curl_multi_init();
        foreach ($urls as $id => $url) {
            $curly[$id] = curl_init();
            curl_setopt($curly[$id], CURLOPT_URL, $url);
            curl_setopt($curly[$id], CURLOPT_HEADER, 0);
            curl_setopt($curly[$id], CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($curly[$id], CURLOPT_TIMEOUT, 30);
            curl_setopt($curly[$id], CURLOPT_FOLLOWLOCATION, true);
            curl_setopt($curly[$id], CURLOPT_SSL_VERIFYPEER, 0);
            curl_setopt($curly[$id], CURLOPT_SSL_VERIFYHOST, 0);
            curl_setopt($curly[$id], CURLOPT_USERAGENT, "Mozilla/5.0(Windows;U;WindowsNT5.1;ru;rv:1.9.0.4)Gecko/2008102920AdCentriaIM/1.7Firefox/3.0.4");
            //curl_setopt($curly[$id], CURLOPT_COOKIEJAR,'cookies.txt');
            //curl_setopt($curly[$id], CURLOPT_COOKIEFILE,'cookies.txt');
            curl_multi_add_handle($mh, $curly[$id]);
        }
        $running = null;
        do {
            curl_multi_exec($mh, $running);
        } while ($running > 0);
        
        foreach ($curly as $id => $c) {
            $result[$id] = curl_multi_getcontent($c);
            curl_multi_remove_handle($mh, $c);
        }
        curl_multi_close($mh);
        return $result;
    }