2015-01-26 5 views
0

Извините, если это очень простые вопросы. Я использую multi curl для обработки массива различных URL-адресов. Кажется, что он работает нормально, однако результаты группируются в один массив. Я хотел бы вставить результаты обратно в мою базу данных, поэтому я думаю, что мне нужно обрабатывать результаты по каждому URL-адресу по отдельности. Мой код выглядит так:curl multi request split result array

$nodes = array($url1, $url2, $url3); 
$node_count = count($nodes); 

$curl_arr = array(); 
$master = curl_multi_init(); 

for($i = 0; $i < $node_count; $i++) 
{ 
    $url =$nodes[$i]; 
    $curl_arr[$i] = curl_init($url); 
    curl_setopt($curl_arr[$i], CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($curl_arr[$i], CURLOPT_FOLLOWLOCATION, true); 
    curl_multi_add_handle($master, $curl_arr[$i]); 
} 

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

for($i = 0; $i < $node_count; $i++) 
{ 
$results[] = curl_getinfo($curl_arr[$i], CURLINFO_EFFECTIVE_URL); 
$results[] = curl_getinfo($curl_arr[$i], CURLINFO_HTTP_CODE); 
$results[] = curl_getinfo($curl_arr[$i], CURLINFO_CONTENT_TYPE); 
} 
print_r($results); 

Я считаю это правильным или нет, если да, то как я могу разделить результаты?

Спасибо за вашу помощь

ответ

0

Вы можете группировать вы результаты по значению $i просто измените последнюю foreach с:

for($i = 0; $i < $node_count; $i++) 
{ 
    $results[$i][] = curl_getinfo($curl_arr[$i], CURLINFO_EFFECTIVE_URL); 
    $results[$i][] = curl_getinfo($curl_arr[$i], CURLINFO_HTTP_CODE); 
    $results[$i][] = curl_getinfo($curl_arr[$i], CURLINFO_CONTENT_TYPE); 
} 

В конце в $results вы будете иметь все значения сгруппированы в мульчу -мерный массив. Вы можете выполнить другой foreach к $results и переформатировать его в более семантическим способом (например, по URL)

+0

Спасибо за вашу помощь. Работает очень хорошо. Я не думаю, что вы можете помочь с моей последней проблемой. Я пытаюсь добавить функцию, чтобы проверить, присутствует ли строка в результате каждого запроса URL-адреса. Я работаю без использования curl multi, но не могу заставить его работать с multi. Эта функция выполняет простую проверку '$ text = curl_exec ($ ch); $ test = strpos ($ text, $ string); ' – user1098178