PHPerKaigi 2025

curl_multi_add_handle

(PHP 5, PHP 7, PHP 8)

curl_multi_add_handleДобавляет обычный cURL-дескриптор к набору cURL-дескрипторов

Описание

curl_multi_add_handle(CurlMultiHandle $multi_handle, CurlHandle $handle): int

Функция добавляет дескриптор handle к набору дескрипторов multi_handle

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

multi_handle

Мультидескриптор модуля cURL, который вернула функция curl_multi_init().

handle

Дескриптор модуля cURL, который вернула функция curl_init().

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

Функция возвращает 0 в случае успешного выполнения или код ошибки вида CURLM_*.

Список изменений

Версия Описание
8.0.0 Параметр multi_handle теперь ожидает экземпляр класса CurlMultiHandle; раньше ожидался ресурс (resource).
8.0.0 Параметр handle теперь ожидает экземпляр класса CurlHandle; раньше, параметр ждал ресурс (resource).

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

  • curl_multi_remove_handle() - Удаляет дескриптор из набора cURL-дескрипторов
  • curl_multi_init() - Возвращает новый мультидескриптор модуля cURL
  • curl_init() - Инициализирует cURL-сеанс сетевой передачи данных

Добавить

Примечания пользователей 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
0
1q0nbg4km at mozmail dot com
2 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