2015-02-20 3 views
0

Это код, я в настоящее время используюКак объединить несколько запросов cURL в одном?

function curl_get_contents($url) { 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_HEADER, 0); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    $data = curl_exec($ch); 
    return $data; 
} 

function meta_scrap($filename, $other, $programming) { 
    $link = 'https://graph.facebook.com/?id=' . $filename . '&scrape=true&method=post'; 
    $output = curl_get_contents($link); 
    $output = json_decode($output); 
    $ogtitle = $output->title; 
} 

Я называю meta_scrap($filename); 8 раз на одной странице. Это делает загрузку страницы очень медленной. Есть ли что-то, что я могу с этим поделать? Я читал о curl_multi_init() я пытался использовать его как этот

function curl_get_contents($pages) { 
    $ch = curl_init(); 
    $ch = array(); 
    $mh = curl_multi_init(); 
    for ($i = 0; $i < count($pages); $i++) { 
     $page = $pages[$i]; 
     $ch[$i] = curl_init(); 
     curl_setopt($ch, CURLOPT_HEADER, 0); 
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
     curl_setopt($ch, CURLOPT_URL, $page); 
     curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
     curl_multi_add_handle($mh, $ch[$i]); 
    } 

    $running = 0; 
    do { 
     curl_multi_exec($mh, $running); 
    } while ($running > 0); 

    $data = curl_exec($ch); 
    $results = reset(json_decode(curl_multi_getcontent($ch[$i]), true)); 
    $resultCount = count($results); 

    curl_close($ch); 
    return $data; 
} 

С этим я не получаю выход? Может ли кто-нибудь помочь мне изменить мой код, чтобы он дал правильный результат?

ответ

1

Вы, кажется, начал работать с несколькими запросами затем вырезать и вставить один обработчик запроса локон здесь:

$data = curl_exec($ch); 
$results = reset(json_decode(curl_multi_getcontent($ch[$i]), true)); 
$resultCount = count($results); 

.... но я не могу себе представить, где бы нашел фрагмент кода, который использует reset() следующим образом.

Вы пытаетесь отложить ответ в $ results, но затем вы отбрасываете этот массив и возвращаете что-то совершенно другое.

Попробуйте это ....

... 
$running = count($pages); 
do { 
    curl_multi_exec($mh, $running); 
    usleep(5000); 
} while ($running > 0); 

$responses=array(); 
for ($i = 0; $i < count($pages); $i++) { 
    $responses[$i]=json_decode(curl_multi_getcontent($ch[$i]), true); 
} 
return $responses; 

Если вы будете повторно использовать функцию, то вы должны также удалить и закрыть каждый локон обрабатывать затем закройте мульти-ручку, прежде чем вернуться.

См. Также мои recent blog post about curl_multi_exec().