php curl_multi_exec当前正在执行curl名称

时间:2018-04-06 07:40:25

标签: php

有没有办法找出这个函数中curl_multi_exec正在执行哪个卷曲... php.net上或多或少提供了?{/ p>

<?php
...
$mh = curl_multi_init();

//add the five handles
curl_multi_add_handle($mh,$ch1);
curl_multi_add_handle($mh,$ch2);
curl_multi_add_handle($mh,$ch3);
curl_multi_add_handle($mh,$ch4);
curl_multi_add_handle($mh,$ch5);
do {
    $mrc = curl_multi_exec($mh, $active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);

while ($active && $mrc == CURLM_OK) {
    if (curl_multi_select($mh) == -1) {
        usleep(1);
    }
    do {
        $mrc = curl_multi_exec($mh, $active);
    } while ($mrc == CURLM_CALL_MULTI_PERFORM);
}
...
?>

1 个答案:

答案 0 :(得分:0)

所有请求都从第一个curl_multi_exec开始,然后将异步运行。

在发布的代码中对curl_multi_exec的后续调用有助于定期检查是否仍有进行中的请求(通过读取$active中引用返回的值)。

还会检查返回到$mrc的值,通常是CURLM_CALL_MULTI_PERFORM(多卷曲仍在运行)或CURLM_OK(多卷曲已完成 - $active应该是FALSE)。请参阅http://php.net/manual/en/curl.constants.php并搜索以CURLM_开头的文字,以查看与curl multi相关的所有常量。

说你的问题没有答案。所有请求都是并行运行的,然后它们会在满足或发生错误时结束。完成所有请求后,curl_multi_exec返回的值将循环退出并允许脚本执行继续。

但请注意,您可以致电 curl_multi_info_read 来收集有关当前转移的信息;在撰写本文时,您可能知道哪些请求已完成(以及通过排除仍在运行的请求);

来自手册:

  

询问多手柄是否有来自个别转移的任何消息或信息。消息可能包括诸如传输中的错误代码或仅传输完成的信息。

     

每次重复调用此函数都会返回一个新结果,直到返回一个FALSE作为此时无法获取的信号。