Собственно есть multi culr
$proxys = array(
'118.172.201.105:57900',
'91.208.39.70:8080',
'185.37.211.222:50330',
'45.55.9.218:3128'
);
$multi = curl_multi_init();
$channels = array();
$starttime=microtime(true);
foreach ($proxys as $proxy) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://test.net/zaprostest');
curl_setopt($ch, CURLOPT_PROXY,"http://".$proxy."/");
curl_setopt($ch, CURLOPT_TIMEOUT, 15);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_multi_add_handle($multi, $ch);
$channels[$proxy] = $ch;
}
$active = null;
do {
$mrc = curl_multi_exec($multi, $active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);
while ($active && $mrc == CURLM_OK) {
if (curl_multi_select($multi) == -1) {
continue;
}
do {
$mrc = curl_multi_exec($multi, $active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);
}
foreach ($channels as $channel) {
dump( curl_multi_getcontent($channel));
curl_multi_remove_handle($multi, $channel);
}
curl_multi_close($multi);
Также есть переменная
$starttime
которая хранит время в милисекундах старта мультикурла. В обычном курле я бы использовал новую переменную с текущим временем в конце курла и высчитал разницу.
Как решить эту задачу в мультикурле?
p.s. погуглив видел что много пишут про
CURLOPT_PROGRESSFUNCTION
, но не могу уловить логику куда ее прописать и куда вставить возврат внутренней функции.