2012-02-16 24 views
28

Robię prostą aplikację, która odczytuje dane json z 15 różnych adresów URL. Mam szczególną potrzebę, że muszę to zrobić serwerowo. Używam file_get_contents($url).PHP Parallel curl requests

Ponieważ używam file_get_contents ($ url). Napisałem prosty skrypt, to jest:

$websites = array(
    $url1, 
    $url2, 
    $url3, 
    ... 
    $url15 
); 

foreach ($websites as $website) { 
    $data[] = file_get_contents($website); 
} 

i to okazał się bardzo powoli, ponieważ czeka na pierwsze żądanie, a następnie zrobić następny.

+1

Google daje wiele wyników dla „zwijają równoległych żądań” – matino

+0

PHP jest jedno- język wątkowy, nie ma żadnej wewnętrznej obsługi dla współbieżności. Można napisać skrypt, który pobiera pojedynczy adres URL (podany jako argument) i wykonać 15 jego wystąpień. – GordonM

+0

Dziękuję za wszystkie opinie. :) – user1205408

Odpowiedz

102

Jeśli masz na myśli multi-curl wtedy coś takiego może pomóc:

 

$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_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_multi_getcontent ($curl_arr[$i] ); 
} 
print_r($results); 
 

Nadzieja to pomaga w jakiś sposób

+0

Próbuję teraz ... :). Dam ci znać, jeśli to zadziała, dziękuję bardzo. – user1205408

+1

Wygląda na to, że działa ... genialnie. Wielkie dzięki! – user1205408

+4

O, to mi się przydarza przez cały czas! Lub głosują na odpowiedź i nie akceptują jej, lub akceptują ją, ale nie głosują na nią. Denerwujący. –