PHP 8.5.0 Released!

Voting

: min(nine, two)?
(Example: nine)

The Note You're Voting On

3315954155 at libero dot it
7 years ago
Sometime with arrays and loops (i.e. for or do while or foreach) curl_multi_init  loses some hits, to work around this problem  it is necessary to divide the loop into two parts: the start with key number zero and than, all the rest. In this way the curl_multi_init doesn't lose any hits. I did a lot of test and it seems to work well enough. 
<?php

function set_option($x, $y){
curl_setopt($x, CURLOPT_URL,  $y);
curl_setopt($x, CURLOPT_HEADER, 0);
curl_setopt($x, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($x, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($x, CURLOPT_ENCODING, "gzip,deflate");
}

$nodes = array('http://php.net/manual/it/function.curl-multi-add-handle.php', 
'http://php.net/manual/en/function.curl-multi-init.php', 
'http://php.net/manual/en/function.curl-multi-setopt.php'
);

$node_count = count($nodes);

$curl_arr = array();
$master = curl_multi_init();
/*
now I put the first part of the array with the start key number zero, add all     
options and add the curl_multi_add_handle;                                               
it is necessary to detach this first part to avoid to lose some handles and than running 
 the loop with the start key number one.                                                  
In this way the curl_multi_init doesn't lose anything and seems to be very stable.       
*/   
    $curl_arr[0] = curl_init($nodes[0]);
    set_option($curl_arr[0], $nodes[0]);
    curl_multi_add_handle($master, $curl_arr[0]);
    

/*  
now the loop can start with key number one                              
*/
$i = 1;
do {
    if ($i!==0){
 
    $curl_arr[$i] = curl_init($nodes[$i]);
    set_option($curl_arr[$i], $nodes[$i]);
    curl_multi_add_handle($master, $curl_arr[$i]);
    }
$i++;    
}while($i < $node_count);

$running = NULL;
do {
    curl_multi_exec($master,$running);
} while($running);

$results = array();
$q = 0;
do{
 $results[$q] = curl_multi_getcontent($curl_arr[$q]);
 curl_multi_remove_handle($master, $curl_arr[$q]);
$q++;    
}while($q < $node_count);

foreach($results as $value){
 echo $value;
}

?>

<< Back to user notes page

To Top