使用curl_multi_*
,我想每x个请求执行一段代码,有任何方法这样做吗?
我想到的唯一方法是检查curl_multi_exec
的$still_running
变量,不幸的是,它不起作用(它不一致,有时它从7跳到1而不经过6,5等)
这是我想出的代码(它并不总是工作,因为我说$still_running
是不一致的):
$still_running = null;
$callbackExecuted = 1;//Counts how many times callback function was executed.
//execute the handles
do
{
//Execute callback every 5 requests
if ($numberOfRequests - $still_running === 5 * $callbackExecuted)
{
callback();
$callbackExecuted++;
}
curl_multi_exec($mh, $still_running);
} while ($still_running > 0);
首先,curl_multi_exec()并行地驱动N个传输,并且对于每次调用,它都进一步驱动它们。$still_running计数器表示当curl_multi_exec()返回时仍在进行的传输的数量。并且它可能需要数百(或更多)调用来完成传输-或更多传输。
如果你想在传输完成时采取行动,那么你可以看到$still_running在它们完成时是如何被扣除的,或者你可以使用curl_multi_info_read()来真正看到每次传输完成的时间。
最后:你的代码示例需要注意!!由于缺少对curl_multi_select()的调用,这个程序将疯狂地忙碌循环,并花费100%的CPU时间,直到所有传输都完成。这可不是件好事