有没有办法找出这个函数中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);
}
...
?>
答案 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作为此时无法获取的信号。