Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Перебрать уникальный прокси


Автор: neoks 4.1.2012, 20:28
В чем суть, есть список прокси и есть список прокси которые уже заняты и их нельзя использовать.
Я уже 3й день мучаюсь, постоянно лажа с ним, это все равно что играть в рулетку )
Вроде настроил и протестировал, работает, но на деле все плохо уже не знаю что делать, нужна ваша помошь.

Вот сама функция для подбора прокси.

Код

function bproxy($proxylist,$proxyex = array()){    
    $parr = explode("\n",trim($proxylist));
    
    foreach($parr as $name){
        if(trim($name) !== '') $d1[] = trim($name);
    }
    foreach($proxyex as $name){
        if(trim($name) !== '') $d2[] = trim($name);
    }
    
    if(count($d2) > 0 && count($d1) > 0){
        foreach($d1 as $name){
            if(!in_array($name,$d2)){
                return $name;
                break;
            }
        }
    }
    elseif(count($d1) > 0){
        return $d1[rand(0,count($d1)-1)];
    }
    
    return false;
}


В $proxylist у меня простой список типа

Код

188.120.229.105:8080
92.63.99.62:8080
92.63.107.192:8080


Функция возвращает уникальный прокси, пробовал функцией array_diff() но она возвращает уникальный учитывая с двух массивов, мне нужен тока с первого списка а именно с $proxylist

На данный момент я уже пробовал массу вариантов, пока добился 50-70% работы, остальные 30% полный облом (:
Хелп плиз )

Автор: mexanika 4.1.2012, 22:31
Вы уверены, что array_diff() не подходит?

из мануала:
Функция array_diff() возвращает массив, состоящий из значений массива array1 , которые отсутствуют в любом другом массиве, перечисленном в последующих аргументах.
т.е. в вашем случае первым массивом должен идти $proxylist

Автор: neoks 4.1.2012, 23:21
Да, пробовал, ведет себя странно и не корректно, вероятность что вернет со списка $proxylist составляет 50%, остальные 50% вернет с другого списка, я пробовал и пробовал, результат удручает (

Автор: actuator 5.1.2012, 09:40
Код

<?
$pl = <<<PL
    188.120.229.105    :    65535
    92.63.99.62    :    8080
    92.63.107.192    :    8080
PL;

function pick_proxy($proxy_list, $used_list = array())
{
    function parse_list($proxy_list) {
        $parsed_list = array();

        foreach (explode("\n", $proxy_list) as $proxy_line) {
            list($addr, $port) = explode(":", $proxy_line);
            $addr = trim($addr); $port = trim($port);
            if (ip2long($addr) && intval($port) && $port < 0x10000) $parsed_list[] = "$addr:$port";
        }

        return $parsed_list;
    }

    $available_list = array_diff(parse_list($proxy_list), parse_list(implode("\n", $used_list)));

    return $available_list[array_rand($available_list)];
}

var_dump(pick_proxy($pl, array('188.120.229.105:65535')));
?>


Глобально и надежно smile

Автор: neoks 5.1.2012, 13:32
Ура, вроде работает, Спасибо actuator, чтоб я без тебя делал  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)