2012-05-31 90 views
2

我一直在使用下面的函数进行异步卷曲的帖子:curl_multi_exec返回空数组

function curl_post_multi($urls){ 
    $curl_arr = array(); 
    $num_urls = count($urls); 
    $mh = curl_multi_init(); 
    for($i= 0; $i < $num_urls; $i++){ 
     $curl_arr[$i] = curl_init(); 
     curl_setopt($curl_arr[$i], CURLOPT_URL, $urls[$i]); 
     curl_setopt($curl_arr[$i], CURLOPT_HEADER, 0); 
     curl_setopt($curl_arr[$i], CURLOPT_POST, true); 
     curl_setopt($curl_arr[$i], CURLOPT_SSL_VERIFYPEER, false); 
     curl_setopt($curl_arr[$i], CURLOPT_RETURNTRANSFER, true); 
     curl_multi_add_handle($mh, $curl_arr[$i]); 
    } 

    $running = null; 
    do{ 
     curl_multi_exec($mh, $running); 
    }while($running > 0); 
    $results = array(); 
    for($i= 0; $i < $num_urls; $i++){ 
     $results[] = curl_multi_getcontent($curl_arr[$i]); 
     curl_multi_remove_handle($mh, $curl_arr[$i]); 
    } 
    curl_multi_close($mh); 
    return $results; 
} 

刚才我已经注意到,它往往只从第一URL返回结果,还是没有结果可言。我已经玩了大约100个这个功能的配置。结果是空数组,curl_error($ curl_arr [$ i])是空的,所以我不确定从哪里开始寻找什么是错的。我知道URL是正确的,因为如果我背对背的普通卷发,它工作正常。

+0

它可能是正确的URL?通过帖子申请一个网页似乎很奇怪,但不发送任何帖子变量,即使这是有效的。它适合我。 – goat

+0

这有什么奇怪的?虽然我不确定什么时候或为什么我学会了这样做,但我一直首选POST发送到GET。 不,URL的没有问题。就像我说过的,它们都可以正常地发布。我开始认为这是较低的水平,或者在POST的另一端。 –

+0

这看起来很容易,只用一个'curl_exec()'来修改url并打印$结果。 IOW,尝试单个卷曲获得结果。也许opts配置不正确。 – David

回答

-1

您的do-while循环从不运行。 $ running永远不会> 1,因为它在前一行设置为null。

+0

这是不正确的。请参阅curl_multi_exec手册 http://php.net/manual/en/function.curl-multi-exec.php $ running由循环的do部分中的该函数设置。 –