(PHP 5, PHP 7, PHP 8)
curl_multi_exec — Executa as subconexões do identificador cURL atual
Processa cada um dos identificadores na pilha. Este método pode ser chamado independentemente de um identificador precisar ou não ler ou gravar dados.
multi_handle
Um manipulador cURL múltiplo retornado por curl_multi_init().
still_running
Uma referência a um sinalizador para informar se as operações ainda estão em execução.
Um código cURL definido nas Constantes Predefinidas cURL.
Nota:
Esta função apenas retorna erros relacionados a toda a pilha de multi-identificadores. Ainda pode ter ocorrido problemas em transferências individuais mesmo quando esta função retorna
CURLM_OK
.
Versão | Descrição |
---|---|
8.0.0 |
O parâmetro multi_handle agora espera uma instância de CurlMultiHandle;
anteriormente, um resource era esperado.
|
Exemplo #1 curl_multi_exec() example
Este exemplo criará dois identificadores cURL para uma lista de URLs que serão adicionados a um multi-identificador e executados de forma assíncrona.
<?php
$urls = [
"https://www.php.net/",
"https://www.example.com/",
];
$mh = curl_multi_init();
$map = new WeakMap();
foreach ($urls as $url) {
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_multi_add_handle($mh, $ch);
$map[$ch] = $url;
}
do {
$status = curl_multi_exec($mh, $unfinishedHandles);
if ($status !== CURLM_OK) {
throw new \Exception(curl_multi_strerror(curl_multi_errno($mh)));
}
while (($info = curl_multi_info_read($mh)) !== false) {
if ($info['msg'] === CURLMSG_DONE) {
$handle = $info['handle'];
curl_multi_remove_handle($mh, $handle);
$url = $map[$handle];
if ($info['result'] === CURLE_OK) {
$statusCode = curl_getinfo($handle, CURLINFO_HTTP_CODE);
echo "Request to {$url} finished with HTTP status {$statusCode}:", PHP_EOL;
echo curl_multi_getcontent($handle);
echo PHP_EOL, PHP_EOL;
} else {
echo "Request to {$url} failed with error: ", PHP_EOL;
echo curl_strerror($info['result']);
echo PHP_EOL, PHP_EOL;
}
}
}
if ($unfinishedHandles) {
if (($updatedHandles = curl_multi_select($mh)) === -1) {
throw new \Exception(curl_multi_strerror(curl_multi_errno($mh)));
}
}
} while ($unfinishedHandles);
curl_multi_close($mh);
?>