curl_multi_init

(PHP 5)

curl_multi_initСоздает набор cURL-дескрипторов

Описание

resource curl_multi_init ( void )

Позволяет параллельную обработку множества cURL-дескрипторов.

Список параметров

У этой функции нет параметров.

Возвращаемые значения

Возвращает набор cURL-дескрипторов в случае успеха, или FALSE в случае неудачи.

Примеры

Пример #1 Пример использования curl_multi_init()

Этот пример создаст два дескриптора cURL, добавит их в набор дескрипторов, а затем запустит их паралелльно.

<?php
// создаем оба ресурса cURL
$ch1 curl_init();
$ch2 curl_init();

// устанавливаем URL и другие соответствующие опции
curl_setopt($ch1CURLOPT_URL"http://lxr.php.net/");
curl_setopt($ch1CURLOPT_HEADER0);
curl_setopt($ch2CURLOPT_URL"http://www.php.net/");
curl_setopt($ch2CURLOPT_HEADER0);

//создаем набор дескрипторов cURL
$mh curl_multi_init();

//добавляем два дескриптора
curl_multi_add_handle($mh,$ch1);
curl_multi_add_handle($mh,$ch2);

$active null;
//запускаем дескрипторы
do {
    
$mrc curl_multi_exec($mh$active);
} while (
$mrc == CURLM_CALL_MULTI_PERFORM);

while (
$active && $mrc == CURLM_OK) {
    if (
curl_multi_select($mh) != -1) {
        do {
            
$mrc curl_multi_exec($mh$active);
        } while (
$mrc == CURLM_CALL_MULTI_PERFORM);
    }
}

//закрываем все дескрипторы
curl_multi_remove_handle($mh$ch1);
curl_multi_remove_handle($mh$ch2);
curl_multi_close($mh);

?>

Смотрите также

add a note add a note

User Contributed Notes 2 notes

up
-2
hushuilong at gmail dot com
2 years ago
Simulate multiple threads request:
<?php
function multiple_threads_request($nodes){
       
$mh = curl_multi_init();
       
$curl_array = array();
        foreach(
$nodes as $i => $url)
        {
           
$curl_array[$i] = curl_init($url);
           
curl_setopt($curl_array[$i], CURLOPT_RETURNTRANSFER, true);
           
curl_multi_add_handle($mh, $curl_array[$i]);
        }
       
$running = NULL;
        do {
           
usleep(10000);
           
curl_multi_exec($mh,$running);
        } while(
$running > 0);
       
       
$res = array();
        foreach(
$nodes as $i => $url)
        {
           
$res[$url] = curl_multi_getcontent($curl_array[$i]);
        }
       
        foreach(
$nodes as $i => $url){
           
curl_multi_remove_handle($mh, $curl_array[$i]);
        }
       
curl_multi_close($mh);       
        return
$res;
}
print_r(muti_thread_request(array(
   
'http://www.example.com',
   
'http://www.example.net',
)));
?>
up
-8
jaisen at jmathai dot com
5 years ago
http://github.com/jmathai/epicode/tree/master/php/EpiCurl.php

If you fire off 10 curl requests in parallel you don't have to wait for all of them to be finished before accessing one which is already finished.
To Top