1

我正在尝试做curl_muliti_*,但我遇到了问题,我不知道是什么导致了问题。当我运行以下代码时,我在这里陷入了无限循环while($active && $mrc === CURLM_OK){

$active = null;
do{
    $mrc = curl_multi_exec($mh, $active);
}while($mrc === CURLM_CALL_MULTI_PERFORM);

while($active && $mrc === CURLM_OK){
    if(curl_multi_select($mh) !== -1){
        do{
            $mrc = curl_multi_exec($mh, $active);
        }while($mrc === CURLM_CALL_MULTI_PERFORM);
    }
}

在循环中(在 if 上方)我添加var_dump(curl_multi_select($mh))并输出它int(-1)为什么这样做?

这是完整的方法:

protected function getURLs($other_params = array()){
    $url      = $this->url;
    $url_list = array();
    if(!is_array($url)){
        return false;
    }
    $mh = curl_multi_init();
    foreach($url as $u){
        $url_list[] = $handle = $this->curlInit($u, $other_params);
        curl_multi_add_handle($mh, $handle);
    }
    $active = null;
    do{
        $mrc = curl_multi_exec($mh, $active);
    }while($mrc === CURLM_CALL_MULTI_PERFORM);

    while($active && $mrc === CURLM_OK){
        if(curl_multi_select($mh) !== -1){
            do{
                $mrc = curl_multi_exec($mh, $active);
            }while($mrc === CURLM_CALL_MULTI_PERFORM);
        }
    }
    $data = array();
    foreach($url_list as $handle){
        $data[] = curl_multi_getcontent($handle);
        curl_multi_remove_handle($mh, $handle);
    }
    curl_multi_close($mh);

    return $data;
}

注意:让我知道您可能需要哪些其他代码。

4

0 回答 0