与CURL Multi PHP不一致
在我的原始答案中,我在while循环中使用了curl_multi_info_read.此循环将继续迭代,直到curl_multi_info_read在队列中找不到剩余数据.如果$active!= 0(意味着curl_multi_exec报告传输仍未完成),则外部while循环将移动到下一次迭代. 总而言之,当仍然没有完成传输时,外部循环继续迭代,并且内部循环仅在完成传输的数据时才进行迭代. PHP文档对于curl多功能非常糟糕,所以我希望这清除了一些东西.下面是另一种做同样事情的方法. do { curl_multi_exec($mh,$active); } while ($active > 0); // while($info = curl_multi_info_read($mh)) would work also here for($i = 0; $i <= $f; $i++){ $info = curl_multi_info_read($mh); if($info['result'] === 0) { echo curl_getinfo($info['handle'],CURLINFO_EFFECTIVE_URL) . ' success<br>'; } else { echo curl_getinfo($info['handle'],CURLINFO_EFFECTIVE_URL) . ' failed<br>'; } } 根据这些信息,您还可以看到不需要curl_multi_select,因为您不希望在有活动之前阻塞某些东西. 使用您在问题中提供的代码,似乎只有在几次传输失败后curl没有继续进行,但实际上仍有数据在缓冲区中排队.你的代码没有足够多次调用curl_multi_info_read.您的代码获取所有成功传输的原因是由于PHP在单个线程上运行,因此脚本挂起等待请求.失败请求的超时不足以使PHP挂起/等待那么长时间,因此while循环执行的迭代次数少于排队数据的次数. (编辑:威海站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |