multi curl загружаю 100 HTTP страниц одновременно, проблемы...

DolgoV

Новичок
multi curl загружаю 100 HTTP страниц одновременно, проблемы...

Прошу помощи у сообщества, в вопросе мультизагрузки HTTP страниц при помощи MULTI CURL.
Задача состоит в том, что бы извлеч из файлика URLS.txt 100 URI, закачать содержимое этих страниц с помощью 100 одновременных асинхронных запросов при помощи вызова функций multi curl. Вот собственно код

PHP:
<?php

## ЗАГРУЗКА даных прямо из файла urls
$tmp = array_map("trim", file('urls.txt'));

$mh = curl_multi_init();
foreach ($tmp as $i => $v)
{
	$ch[$i] = curl_init();
	curl_setopt($ch[$i], CURLOPT_URL, $v);
	curl_setopt($ch[$i], CURLOPT_RETURNTRANSFER, 1);	
	curl_setopt($ch[$i], CURLOPT_CONNECTTIMEOUT, 10);
	curl_setopt($ch[$i], CURLOPT_TIMEOUT, 20);	
	curl_multi_add_handle($mh,$ch[$i]);	
} 

$active = null;

$time = time();
do {
    $mrc = curl_multi_exec($mh, $active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);

while ($active && $mrc == CURLM_OK) {
    if (curl_multi_select($mh) != -1) {
        do {
            $mrc = curl_multi_exec($mh, $active);
        } while ($mrc == CURLM_CALL_MULTI_PERFORM);
    }
}
foreach ($ch as $i => $v)
{
	$res[] = curl_multi_getcontent($ch[$i]);
	$info[] = curl_getinfo($ch[$i]);
	curl_multi_remove_handle($mh, $ch[$i]);
}

curl_multi_close($mh);

echo time()-$time;
$r[] = "num\tcode\tlength";
foreach ($res as $i => $v)
$r[] =  "$i\t".$info[$i]['http_code']."\t".strlen($v);
$ver = curl_version();
$r[] = '';
$r[] = 'curl_version';
foreach ($ver as $k => $light)
$r[] = "$k => $light";

file_put_contents("res.log", implode("\r\n", $r));

?>
Проблема: на Windows XP (где разрабатывается скрипт) c установленными PHP 5.2.6 и libcurl 7.16 всё работает замечательно, но скрипт должен выполняться на выделенном сервере с Fedora Core 6 (Linux) PHP 5.2.6 & curl 7.18 , так вот на сервере возникает 2 проблемы которые не могу решить:
1-я: Время выполнея скрипта на сервере больше чем сумма CONNECTTIMEOUT+TIMEOUT, на Windows чётко совпадает либо меньше.
2-я. На сервере не загружаются все ссылки, только 5 штук из 100 почему то добавленные последними в массив $mh
для дебага я сделал файлик логов
res.log в который записую номер урл из файла urls.txt http_code который был получен, и длинну полученных данных.

За 30 секунд на windows XP у меня активизируются ~90 из 100 потоков, при этом удаётся закачать ~ 20 Мб информации, на сервере активными являются несколько (5-7) ссылок общим весом около 200 кбайт.
Параметр CURLOPT_MAXCONNECTS установленный в 100 на сервере не приводит ни к чему, на Windows XP вызывает ошибку PHP.

У кого есть какие мысли ?
P.S. пробовал запускать даный скрипт на другом сервере с FC6 & PHP 5.2.6 curl 7.16.0 та же самая проблема.
 

DolgoV

Новичок
Автор оригинала: Angerslave
error_reporting(E_ALL); на линуксовом сервере пробовал?
только что попробовал добавил эту фунцию в скрипт, ничего на екран в PUTTY не вывело
 
Сверху