PHP Параллельные запросы curl - PullRequest
35 голосов
/ 16 февраля 2012

Я делаю простое приложение, которое читает данные JSON с 15 различных URL-адресов.У меня есть особая потребность в том, чтобы сделать это на сервере.Я использую file_get_contents($url).

Поскольку я использую file_get_contents ($ url).Я написал простой сценарий:

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

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

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

1 Ответ

125 голосов
/ 16 февраля 2012

Если вы имеете в виду multi-curl, то что-то вроде этого может помочь:


$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);

Надеюсь, это поможет каким-то образом

...