PHPerKaigi 2025

curl_multi_add_handle

(PHP 5, PHP 7, PHP 8)

curl_multi_add_handleAñade un recurso cURL a un grupo de recursos cURL

Descripción

curl_multi_add_handle(resource $mh, resource $ch): int

Añade el recuso ch al grupo de recursos mh

Parámetros

mh

El multi recurso cURL multi devuelto por curl_multi_init().

ch

El recurso cURL devuelto por curl_init().

Valores devueltos

En caso de éxito devuelve 0, sino devuelve alguno de los códigos de error CURLM_XXX

Ejemplos

Ejemplo #1 curl_multi_add_handle() example

Este ejemplo creará dos recursos cURL, los añadirá a un grupo de recursos y entoces los ejecutará de forma asíncrona.

<?php
// Crea los dos recursos cURL
$ch1 = curl_init();
$ch2 = curl_init();

// Establecer la URL y otras opciones apropiadas
curl_setopt($ch1, CURLOPT_URL, "http://www.example.com/");
curl_setopt($ch1, CURLOPT_HEADER, 0);
curl_setopt($ch2, CURLOPT_URL, "http://www.php.net/");
curl_setopt($ch2, CURLOPT_HEADER, 0);

// Crea el recurso cURL múltiple
$mh = curl_multi_init();

// Añade los dos recursos
curl_multi_add_handle($mh,$ch1);
curl_multi_add_handle($mh,$ch2);

// Ejecuta los recursos múltiples
do {
$status = curl_multi_exec($mh, $active);
if (
$active) {
curl_multi_select($mh);
}
} while (
$active && $status == CURLM_OK);

// Cierra todos los recursos
curl_multi_remove_handle($mh, $ch1);
curl_multi_remove_handle($mh, $ch2);
curl_multi_close($mh);
?>

Ver también

add a note

User Contributed Notes 6 notes

up
9
Anonymous
12 years ago
The 'do' loop in this example will cycle indefinitely until all curl downloads complete, needlessly using CPU cycles. A much better way is to block while dowloads are in progress. Refer to the example code on the curl_multi_exec() page instead, which does this!
up
3
3315954155 at libero dot it
6 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;
}

?>
up
-1
1q0nbg4km at mozmail dot com
4 days ago
Самый быстрый и безопасный сервис обмена электронных денег ждет вас на <a href=https://www.bestchange.ru/?p=1305667>BestChange.ru</a>. Если вы фрилансер, веб-мастер, получаете деньги за услуги и постоянно имеете дело с электронной валютой в сети, то пользоваться традиционными сервисами не всегда удобно. Гораздо приятнее иметь дело с обменными пунктами, где меньше ограничений, лучше курсовая разница, скидки на тарифы для постоянных клиентов. Согласны? На BestChange представлены именно такие обменные пункты, «заточенные» под завсегдатаев Интернета, обладающие безупречной репутацией, решающие любые вопросы на раз-два-три.
Проходите по ссылке — более 500 проверенных обменных онлайн-сервисов в одном месте — <a href=https://www.bestchange.ru/?p=1305667>BestChange.ru</a>
up
-4
kamsamlt888 at gmail dot com
6 years ago
$nodes = array('http://www.google.com', 'http://www.microsoft.com', 'http://yahoo.com');
$node_count = count($nodes);

$curl_arr = array();
$master = curl_multi_init();

for($i = 0; $i < $node_count; $i++)
{
$url =$nodes[$i];
$curl_arr[$i] = curl_init($url);
curl_setopt($curl_arr[$i], CURLOPT_RETURNTRANSFER, true);
curl_multi_add_handle($master, $curl_arr[$i]);
}

do {
curl_multi_exec($master,$running);
} while($running > 0);

echo "results: ";
for($i = 0; $i < $node_count; $i++)
{
$results = curl_multi_getcontent ( $curl_arr[$i] );
echo( $i . "\n" . $results . "\n");
}
echo 'done';
up
-5
RNS-MO-dig
1 year ago
Разрешение на строительство — это государственный удостоверение, предоставленный правомочными ведомствами государственного управления или территориального самоуправления, который дает возможность начать стройку или исполнение строительного процесса.
<a href=https://rns-50.ru/>Получение разрешения на строительство</a> предписывает законодательные основания и стандарты к строительству, включая разрешенные категории работ, предусмотренные материалы и методы, а также включает строительные нормативные акты и комплексы охраны. Получение разрешения на строительную деятельность является обязательным документов для строительной сферы.
up
-5
RNS-MO-dig
1 year ago
Разрешение на строительство — это официальный документ, выписываемый полномочными органами государственного аппарата или местного управления, который позволяет начать строительную деятельность или осуществление строительных операций.
<a href=https://rns-50.ru/>Разрешение на строительство</a> формулирует юридические основы и стандарты к строительным операциям, включая допустимые категории работ, разрешенные материалы и подходы, а также включает строительные инструкции и комплекты безопасности. Получение разрешения на возведение является необходимым документов для строительной сферы.
To Top