Параллельная загрузка в php

booch
На сайте с 06.03.2007
Offline
125
1712

Приветствую всех.

Имеется php скрипт, в котором есть следующие строчки:

....

$x=file_get_contents("http://site1.ru");
....
$y=file_get_contents("http://site2.ru");
....
$z=file_get_contents("http://site3.ru");
....

Грузится несколько страниц и потом я с ними работаю. Так вот ждать пока он загрузятся все страницы поочерёдке долго слишком, пока сервер ответит, а вдруг не ответит и так далее. Хотелось бы разом загрузить все страницы и потом уже с ними начать работу. Но как сделать так, чтобы все эти страницы загружались параллельно?

Идея года! Такого в онлайн играх ещё не было. (http://ams-ter.mybrute.com) Перспективный блог (http://seoamster.ru)
[Удален]
#1

http://www.php.net/manual/en/function.curl-multi-init.php

Там с примером


<?php
// create both cURL resources
$ch1 = curl_init();
$ch2 = curl_init();

// set URL and other appropriate options
curl_setopt($ch1, CURLOPT_URL, "http://www.example.com/");
curl_setopt($ch1, CURLOPT_HEADER, 0);
curl_setopt($ch2, CURLOPT_URL, "http://www.php.net/");
curl_setopt($ch2, CURLOPT_HEADER, 0);

//create the multiple cURL handle
$mh = curl_multi_init();

//add the two handles
curl_multi_add_handle($mh,$ch1);
curl_multi_add_handle($mh,$ch2);

$running=null;
//execute the handles
do {
curl_multi_exec($mh,$running);
} while ($running > 0);

//close the handles
curl_multi_remove_handle($mh, $ch1);
curl_multi_remove_handle($mh, $ch2);
curl_multi_close($mh);

?>

[Удален]
#2
booch:
ждать пока он загрузятся все страницы поочерёдке долго слишком, пока сервер ответит, а вдруг не ответит и так далее. Хотелось бы разом загрузить все страницы

Вы считаете, что параллельная загрузка взамен последовательной что-то ускорит?

Dreammaker
На сайте с 20.04.2006
Offline
569
#3
Serge_N:
параллельная загрузка взамен последовательной что-то ускорит?

ускорит. Общий процесс.

[Удален]
#4
Serge_N:
Вы считаете, что параллельная загрузка взамен последовательной что-то ускорит?

При широком канале скорость отработки скрипта параллельной загрузки с нескольких мест будет ограничена либо отработкой загрузки с самого медленного хоста, либо таймаутом (смотря что раньше наступит).

booch
На сайте с 06.03.2007
Offline
125
#5
Serge_N:
Вы считаете, что параллельная загрузка взамен последовательной что-то ускорит?

Да, канал широкий, часть его простаивает. Параллельная загрузка немного, но займёт эту свободную часть тем самым время загрузки будет = максимальному времени загрузки одного из загружаемых сайтов, а не сумме времени загрузки каждого сайта.

booch добавил 10.02.2009 в 18:42

Спасибо, буду пробовать.

booch добавил 10.02.2009 в 18:45

А есть какой-нибудь вариант, чтобы можно было разделить куда записывать результаты? Т.е. первый сайт в $x1, второй в $x2 и так далее. В мультикурле не получается так сделать. А если писать всё в одну, то проблемно определить где чей код начинается.

[Удален]
#6
booch:

А есть какой-нибудь вариант, чтобы можно было разделить куда записывать результаты? Т.е. первый сайт в $x1, второй в $x2 и так далее. В мультикурле не получается так сделать. А если писать всё в одну, то проблемно определить где чей код начинается.

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

[Удален]
#7

http://phpdude.ru/archives/318

читай, используй и учись. тебе поможет я думаю. не за что.

N
На сайте с 06.05.2007
Offline
419
#8

велосипед с баянным приводом.

посмотрите как пишут профи http://code.google.com/p/multicurl-library/

Кнопка вызова админа ()

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий