Модераторы: Aliance, skyboy, MoLeX, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> проблема с потоками curl 
:(
    Опции темы
EJIqpEP
Дата 4.1.2012, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 17.5.2009

Репутация: нет
Всего: нет



Добрый день. Когда паршу 50 ссылок из них нормально считывает 9. Остальные получают ошибку 503. Каким образом можно уменьшить скорость обработки ссылок. Или может быть проблема в чем то другом. Или как выставить количество потоков. Curl вообще не понимаю пока мб поможете переписать скрипт.
В файле pages.txt ссылки такого вида:
http://shkolazhizni.ru/archive/0/n-51320/
Код прилагается:
Код

<?php
ini_set('memory_limit', '20000M');
set_time_limit(0);
error_reporting(E_ALL);
 $dir = $_SERVER['DOCUMENT_ROOT']."/ejiqpep/partemp/papka_result/";
 $ar = file("pages.txt");

foreach ($ar as $st) {
    $urls[] = trim($st);
}
$mh = curl_multi_init(); 
// массив заданий для мультикурла
$tasks = array();
foreach ($urls as $url) {
        // инициализируем отдельное соединение (поток)
        $ch = curl_init($url);
        // возвращать результат
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        // не возвращать http-заголовок
        curl_setopt($ch, CURLOPT_HEADER, 0);
        // таймаут соединения
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
        // таймаут ожидания
        curl_setopt($ch, CURLOPT_TIMEOUT, 10);
        // добавляем дескриптор потока в массив заданий
        $tasks[$url] = $ch;
        // добавляем дескриптор потока в мультикурл
        curl_multi_add_handle($mh, $ch);
}


// количество активных потоков
$active = null;
while( ($mrc = curl_multi_exec($mh, $running))==CURLM_CALL_MULTI_PERFORM ); //просто запускаем все соединения 
while($running && ($mrc == CURLM_OK)){
   if($running and curl_multi_select($mh)!=-1 ){
        do{
            $mrc = curl_multi_exec($mh, $running);
            $info=curl_multi_info_read($mh);
            // если поток завершился
            if( $info and $info['msg'] == CURLMSG_DONE ){
                $ch = $info['handle'];
                $url = array_search($ch, $tasks);
                $status=curl_getinfo($ch,CURLINFO_HTTP_CODE);
                $tasks[$url]=curl_multi_getcontent($info['handle']); 
                curl_multi_remove_handle($mh, $ch);
                curl_close($ch);
            }
        }while ($mrc == CURLM_CALL_MULTI_PERFORM);
    }
    usleep(10000);
}
// закрываем мультикурл
curl_multi_close($mh);
$i = 1;
// print_r($tasks);
foreach($tasks as $key => $task){
    $directory = $dir.$i.".html";
    $f = fopen($directory,"w+");
    if (fwrite($f,$task)) echo $key."<br>";
    fclose($f);
    $i++;
}
?>

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Сеть | Следующая тема »


 




[ Время генерации скрипта: 0.0433 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.