[英]PHP - Curl MultiRequest Timeout
I'm using this following multiRequest function and sometimes the problem occurs, that the loop at我正在使用以下 multiRequest 函数,有时会出现问题,即循环在
do { curl_multi_exec($mh, $running); } while ($running > 0);
seems endless and reach my php execution limit.似乎无穷无尽并达到我的 php 执行限制。 I thought it had sth to do with the DNS Lookup, so I'm calling the ip addresses directly now.
我认为它与DNS查找有关,所以我现在直接调用IP地址。
But this problem sadly still occurs sometimes... Is there a way to set a timeout for each handle to avoid an endless loop?但遗憾的是,这个问题有时仍然会发生......有没有办法为每个句柄设置超时以避免无限循环? What else I could do to fix this problem?
我还能做些什么来解决这个问题?
Thank you very much!非常感谢!
function multiRequest($data, $options = array()) { // array of curl handles $curly = array(); // data to be returned $result = array(); // multi handle $mh = curl_multi_init(); // loop through $data and create curl handles // then add them to the multi-handle foreach ($data as $id => $d) { $curly[$id] = curl_init(); $url = (is_array($d) && !empty($d['url'])) ? $d['url'] : $d; curl_setopt($curly[$id], CURLOPT_URL, $url); curl_setopt($curly[$id], CURLOPT_HEADER, 0); curl_setopt($curly[$id], CURLOPT_RETURNTRANSFER, 1); // post? if (is_array($d)) { if (!empty($d['post'])) { curl_setopt($curly[$id], CURLOPT_POST, 1); curl_setopt($curly[$id], CURLOPT_POSTFIELDS, $d['post']); } } // extra options? if (!empty($options[$id])) { curl_setopt_array($curly[$id], $options[$id]); } curl_multi_add_handle($mh, $curly[$id]); } // execute the handles $running = null; do { curl_multi_exec($mh, $running); } while ($running > 0); // get content and remove handles foreach($curly as $id => $c) { $result[$id] = curl_multi_getcontent($c); curl_multi_remove_handle($mh, $c); } // all done curl_multi_close($mh); return $result; }
You can set an individual timeout on a handle with CURLOPT_TIMEOUT (and other options).您可以使用 CURLOPT_TIMEOUT(和其他选项)在句柄上设置单独的超时。
You can have your own timeout and just remove the handle from the multi handle (which thus cancels the operation) at any given time you think enough is enough.您可以拥有自己的超时时间,并在您认为足够的任何给定时间从多句柄中删除句柄(从而取消操作)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.