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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Алгоритм проверки 
:(
    Опции темы
alligator
Дата 22.10.2014, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Всем привет, есть задача  отфильтровать ненужные ссылки в массиве:
критерием для проверки является наличие на сайте специального файла.... для примера: http://url/test/1.xml
Код

Array
(
    [1] => Array
        (
            [info] => Array
                (
                    [name] => ЗАО ЮниКредит Банк
                    [regnum] => 1
                )

            [urls] => Array
                (
                    [0] => http://kartaskidok.unicreditbank.ru
                    [1] => http://m.unicreditbank.ru
                    [2] => http://pda.unicredit.ru
                    [3] => http://unicredit.ru
                    [4] => http://unicreditbank.ru
                    [5] => http://www.imbank.ru
                    [6] => http://www.unicreditbank.ru
                    [7] => http://www.unicreditgroup.ru
                    [8] => https://enter.unicredit.ru
                )

        )

    [2] => Array
        (
            [info] => Array
                (
                    [name] => ЗАО "КАБ "Викинг"
                    [regnum] => 2
                )

            [urls] => Array
                (
                    [0] => http://viking.spb.ru
                )

        )

    [3] => Array
        (
            [info] => Array
                (
                    [name] => Банк "Кредит-Москва" (ОАО)
                    [regnum] => 5
                )

            [urls] => Array
                (
                    [0] => http://www.cmbank.ru
                    [1] => http://www.eng.cmbank.ru
                    [2] => http://www.plastilincard.ru
                    [3] => http://www.plastilincards.com
                    [4] => http://www.plastilincards.ru
                    [5] => https://ibank.cmbank.ru
                )

        )


Есть функция с эмуляцией много поточности curl которая проверяет N кол-во ссылок сразу и работает с массивом вида:
0 url
1 url
2 url

Код

function UrlProcess($urls,    &$result, $action){

    $threads = $this->threads;
    $useragent = $this->all_useragents[array_rand($this->all_useragents)];
  if(sizeof($urls)>0){
    $i = 0;
    for($i=0;$i<count($urls);$i=$i+$threads)
    {
        $urls_pack[] = array_slice($urls, $i, $threads);
    }
    foreach($urls_pack as $pack)
    {
        $mh    = curl_multi_init(); unset($conn);
        foreach    ($pack as $i =>    $url)    {
            $url=str_replace(array('http://','https://'),'',$url);
            $conn[$i]=curl_init();
            $this->options[CURLOPT_URL]="http://".trim($url).$this->path;
            $this->options[CURLOPT_TIMEOUT]=$this->timeout;
            $this->options[CURLOPT_USERAGENT]=$useragent;
            $this->options[CURLOPT_CONNECTTIMEOUT]=$this->connect_timeout;
            curl_setopt_array($conn[$i], $this->options);
            curl_multi_add_handle ($mh,$conn[$i]);
        }
        do {
            $n=curl_multi_exec($mh,$active);
            usleep($this->tsleep);
            } while    ($active);

        foreach    ($pack as $i =>    $url)
        {
            $response = curl_multi_getcontent($conn[$i]);
            $info      = curl_getinfo($conn[$i]);


            if($info['http_code'] and preg_match('/(<CredOrgDepRate(?:.+)>(?:.+)<\/CredOrgDepRate>)/is', $response) and !preg_match('/(body|html)/i', $response)){
                if($action=='getrate')
                    { 
                        $XML_Object=$this->XML2Object($response);
                        $Org=$XML_Object->Org;
                        $Org->addAttribute('Url', $url);
                        $result[]=$XML_Object;
                        //echo $url." - ".$XML_Object->Org->attributes()->RegNum."<br/>\r\n";
                        
                    }    

                if($action=='check') {        $result[]=$url;    }    

            }    else    {
            //    continue;//если    xml    не найден переходим    к следующему сайту
            //echo $url."<br/>";
            }//End of Bad Urls
            curl_multi_remove_handle ( $mh , $conn[$i] );
            curl_close($conn[$i]);
        
//curl_multi_close($mh);
        }//End of Check action
    }
curl_multi_close($mh);
}else{
    exit ('Невозможно запустить проверку нет данных для обработки!');
}
}


Так вот вопрос следующий какой алгоритм можно придумать чтобы проверять к примеру 30 банков одновременно
но к примеру если по первой ссылке файл не найден то проверить следующуюю ссылку , а если найден то остальные ссылки не проверять

Это сообщение отредактировал(а) alligator - 22.10.2014, 19:42
PM MAIL   Вверх
baldina
Дата 22.10.2014, 23:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

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



ответ следующий либо проверка одновременно либо если первый не найден то проверить следующую.

ЗЫ. решение очевидно заключается в ожидании возвращаемого значения CURLM_OK, а не пока $active, и обработке того, что уже исполнилось
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

Внимание: данный раздел предназначен для решения сложных, нестандартных задач.

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


 




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


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

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