curl_multi_exec

(PHP 5)

curl_multi_exec --  Run the sub-connections of the current cURL handle

Description

int curl_multi_exec ( resource mh, int &still_running )

警告

本函数暂无文档,仅有参数列表。

See also curl_multi_init() and curl_exec().


add a note add a note User Contributed Notes
blucasco at g mail com
08-Sep-2005 10:02
The use of "curl_multi_remove_handle" causes seg faults in pre 5.1 versions of PHP.  Apparently this has been fixed. 

http://bugs.php.net/bug.php?id=34420
dtorop933 at gmail dot com
08-Jan-2005 02:21
Here is a revision of rhondle's example.  It uses curl_multi_select() to reduce CPU usage while waiting on the network.  It is also includes some error handling and cleanup code.

<?php
$connomains
= array(
  
"http://www.cnn.com/",
  
"http://www.canada.com/",
  
"http://www.yahoo.com/"
);

$mh = curl_multi_init();

foreach (
$connomains as $i => $url) {
 
$conn[$i] = curl_init($url);
 
curl_setopt($conn[$i], CURLOPT_RETURNTRANSFER, 1);
 
curl_multi_add_handle ($mh,$conn[$i]);
}

// start performing the request
do {
 
$mrc = curl_multi_exec($mh, $active);
} while (
$mrc == CURLM_CALL_MULTI_PERFORM);

while (
$active and $mrc == CURLM_OK) {
 
// wait for network
 
if (curl_multi_select($mh) != -1) {
  
// pull in any new data, or at least handle timeouts
  
do {
    
$mrc = curl_multi_exec($mh, $active);
   } while (
$mrc == CURLM_CALL_MULTI_PERFORM);
  }
}

if (
$mrc != CURLM_OK) {
  print
"Curl multi read error $mrc\n";
}

// retrieve data
foreach ($connomains as $i => $url) {
  if ((
$err = curl_error($conn[$i])) == '') {
  
$res[$i]=curl_multi_getcontent($conn[$i]);
  } else {
   print
"Curl error on handle $i: $err\n";
  }
 
curl_multi_remove_handle($mh,$conn[$i]);
 
curl_close($conn[$i]);
}
curl_multi_close($mh);

print_r($res);
?>
rhondle at hotmail dot com
05-May-2004 03:55
Here's a quick and dirty example for curl-multi from PHP, tested on PHP 5.0.0RC1 CLI / FreeBSD 5.2.1

<?php
$connomains
= array(
  
"http://www.cnn.com/",
  
"http://www.canada.com/",
  
"http://www.yahoo.com/"
  
);

$mh = curl_multi_init();

foreach (
$connomains as $i => $url) {
      
$conn[$i]=curl_init($url);
      
curl_setopt($conn[$i],CURLOPT_RETURNTRANSFER,1);
      
curl_multi_add_handle ($mh,$conn[$i]);
}

do {
$n=curl_multi_exec($mh,$active); } while ($active);

foreach (
$connomains as $i => $url) {
      
$res[$i]=curl_multi_getcontent($conn[$i]);
      
curl_close($conn[$i]);
}

print_r($res);

?>

-Marty
http://marty.anstey.ca/