我使用下面的multiRequest函数,有时会出现问题,即处的循环
do{curl_multi_exec($mh,$running);}while($running>0)
似乎无穷无尽,达到了我的php执行极限。我认为这与DNS查找有关,所以我现在直接调用ip地址。
但不幸的是,这个问题有时仍然会发生。。。有没有办法为每个句柄设置一个超时来避免无休止的循环?我还能做些什么来解决这个问题?
非常感谢!
函数multiRequest($data,$options=array()){//卷曲手柄阵列$curl=array();//要返回的数据$result=array();//多手柄$mh=curl_multi_init();//循环$data并创建卷曲句柄//然后将它们添加到多句柄foreach($data为$id=>$d){$curil[$id]=curl_init();$url=(is_array($d)&&!空($d['url']))$d['url']:$d;curl_setopt($curli[$id],CURLOPT_URL,$URL);curl_setopt($curli[$id],CURLOPT_HEADER,0);curl_setopt($curli[$id],CURLOPT_RETURNTTRANSFER,1);//帖子?if(is_array($d)){if(!empty($d['post'])){curl_setopt($curli[$id],CURLOPT_POST,1);curl_setopt($curli[$id],CURLOPT_POSTFIELDS,$d['post']);}}//额外的选择?if(!empty($options[$id])){curl_setopt_array($curil[$id],$options[$id');}curl_multi_add_handle($mh,$curli[$id]);}//执行句柄$running=null;做{curl_multi_exec($mh,$running);}while($running>0);//获取内容并删除句柄foreach($curial表示$id=>$c){$result[$id]=curl_multi_getcontent($c);curl_multi_remove_handle($mh,$c);}//全部完成curl_multi_close($mh);return$result;}
-
您可以使用CURLOPT_timeout(和其他选项)在句柄上设置单独的超时。
-
您可以有自己的超时,只需在您认为足够的任何给定时间从多句柄中删除句柄(从而取消操作)。