PHP 7.1.12 Released

curl_multi_init

(PHP 5, PHP 7)

curl_multi_initYeni bir çoklu cURL tanıtıcısı döndürür

Açıklama

resource curl_multi_init ( void )

Çok sayıda cURL tanıtıcısının aynı anda işlem görmesini sağlar.

Değiştirgeler

cct

curl_multi_init() işlevinden dönen çoklu cURL tanıtıcısı.

Dönen Değerler

Başarı durumunda bir çoklu-cURL tanıtıcısı yoksa FALSE döner.

Örnekler

Örnek 1 - curl_multi_init() örneği

Bu örnekte iki cURL tanıtıcısı oluşturulup bir çoklu tanıtıcıya eklenip bu ikisi birlikte çalıştırılmaktadır.

<?php
// iki cURL özkaynağı oluşturalım
$ct1 curl_init();
$ct2 curl_init();

// URL'yi ve ilgili seçenekleri belirtelim
curl_setopt($ct1CURLOPT_URL"http://www.example.com/");
curl_setopt($ct1CURLOPT_HEADER0);
curl_setopt($ct2CURLOPT_URL"http://www.php.net/");
curl_setopt($ct2CURLOPT_HEADER0);

// çoklu cURL tanıtıcısını oluşturalım
$cct curl_multi_init();

// iki tanıtıcıyı buna ekleyelim
curl_multi_add_handle($cct,$ct1);
curl_multi_add_handle($cct,$ct2);

$running=null;
// tanıtıcıları çalıştıralım
do {
    
curl_multi_exec($cct,$running);
} while (
$running 0);

// tanıtıcıları kapatalım
curl_multi_remove_handle($cct$ct1);
curl_multi_remove_handle($cct$ct2);
curl_multi_close($cct);

?>

Ayrıca Bakınız

add a note add a note

User Contributed Notes 4 notes

up
27
xxavalanchexx at gmail dot com
3 years ago
According to https://bugs.php.net/bug.php?id=61141:

On Windows setups using libcurl version 7.24 or later (which seems to correspond to PHP 5.3.10 or later), you may find that curl_multi_select() always returns -1, causing the example code in the documentation to timeout. This is, apparently, not strictly a bug: according to the libcurl documentation, you should add your own sleep if curl_multi_select returns -1.

Therefore, in order to work correctly on Windows for PHP 5.3.10+, the second loop in the example code should look something like the following:

<?php
while ($active && $mrc == CURLM_OK) {
    if (
curl_multi_select($mh) == -1) {
       
usleep(100);
    }
    do {
       
$mrc = curl_multi_exec($mh, $active);
    } while (
$mrc == CURLM_CALL_MULTI_PERFORM);
}
?>
up
16
w_haigh at yahoo dot com
2 years ago
Here's an easier to follow example, From : http://arguments.callee.info/2010/02/21/multiple-curl-requests-with-php/

// build the individual requests, but do not execute them
$ch_1 = curl_init('http://webservice.one.com/');
$ch_2 = curl_init('http://webservice.two.com/');
curl_setopt($ch_1, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch_2, CURLOPT_RETURNTRANSFER, true);
 
// build the multi-curl handle, adding both $ch
$mh = curl_multi_init();
curl_multi_add_handle($mh, $ch_1);
curl_multi_add_handle($mh, $ch_2);
 
// execute all queries simultaneously, and continue when all are complete
  $running = null;
  do {
    curl_multi_exec($mh, $running);
  } while ($running);

//close the handles
curl_multi_remove_handle($mh, $ch1);
curl_multi_remove_handle($mh, $ch2);
curl_multi_close($mh);
 
// all of our requests are done, we can now access the results
$response_1 = curl_multi_getcontent($ch_1);
$response_2 = curl_multi_getcontent($ch_2);
echo "$response_1 $response_2"; // output results
up
-6
hushuilong at gmail dot com
6 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
-46
jaisen at jmathai dot com
9 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