Какой лучший пример для использования Multi-cURL? - PullRequest
0 голосов
/ 26 октября 2019

Каков наилучший способ / код для использования подхода CURL-MULTI? Я использую приведенный ниже код, но много раз, $response возвращает false.

$mch = curl_multi_init();
$handlesArray=[];
foreach ($urls as $key=> $url) { 
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_URL, $url);
    $handlesArray[$key] = $ch; 
    curl_multi_add_handle($mch, $handlesArray[$key]);
}

             // $index = null; do{ curl_multi_exec($mch, $index); } while ($index > 0);
$active=true; $mrc = CURLM_OK;
while ($active && $mrc == CURLM_OK) {
    // Wait for activity on any curl-connection
    if (curl_multi_select($mch) == -1) {        
        usleep(100);
    }
    // Continue to exec until curl is ready to give us more data
    do {
        $mrc = curl_multi_exec($mch, $active);
    } while ($mrc == CURLM_CALL_MULTI_PERFORM);
}

foreach($urls as $key => $url)
{
    $handle=$handlesArray[$key];
    $response = curl_multi_getcontent($handle);
    if(!$response) echo "error $key !!";
    curl_multi_remove_handle($mch, $handle); 
    curl_close($handle);
}
curl_multi_close($mch);

Есть ли что-нибудь, что можно изменить там?

1 Ответ

0 голосов
/ 26 октября 2019

Временно (не идеально) я использовал такой подход:

...
if(!response) {    
    // repeat once again
    $response = curl_exec($ch);
    if(response)   echo "Retry succeed!";
    else           echo "Error on retry call too.."; 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...