Прокси граббер с дизайном

Discussion in 'PHP' started by [0rby], 9 Jul 2010.

  1. [0rby]

    [0rby] Banned

    Joined:
    9 Jul 2010
    Messages:
    0
    Likes Received:
    1
    Reputations:
    0
    PHP:
    <?php
    include("include/winbinder.php");

    define("SITES""sites.txt");
    define("USER_AGENT""Mozilla/5.0 (Windows; U; Windows NT 6.1; ru; rv:1.9.1.9) Gecko/20100315 Firefox/3.5.9");
    define("TIMER_ID""1");

    $pos 0;

    $mainwin wb_create_window(NULLPopupWindow"Proxy grabber by [ac1D]"WBC_CENTERWBC_CENTER3851950);  
    $label wb_create_control ($mainwinLabel""1014510020);  
    $edit wb_create_control ($mainwinRTFEditBox""12010250150); 
    wb_create_control ($mainwinPushButton"Start"101080252);
    if (!
    file_exists(SITES) && filesize(SITES) == 0)
    {
        
    fputs(fopen(SITES"a+"), "http://cool-proxy.ru/\r\n");
    }
    else
    {
        
    wb_create_timer($mainwinTIMER_ID100);
    }
    wb_set_handler($mainwin"process_main");
    wb_main_loop(); 

    function 
    get($hostname)
    {
        
    $hostname str_replace("http://"""$hostname);
        list(
    $host$path) = split("/"$hostname); 
        
    $path str_replace($host""$hostname); 
        if (
    strlen($path) == 0
        {
            
    $path "/";
        }
        
    $fp fsockopen($host80$errno$errstr5);
        if (
    $fp)
        {
            
    $req "GET $path HTTP/1.1\r\n";
            
    $req .= "Host: $host\r\n";
            
    $req .= "User-Agent: ".USER_AGENT."\r\n";
            
    $req .= "Connection: close\r\n\r\n";
            
    $line "";
            
    fputs($fp$req);
            while(!
    feof($fp))
            {
                
    $line .= fgets($fp128);
            }
            list(
    $headers$html) = split("\r\n\r\n"$line);
            
    $html str_replace($headers""$html);
            return 
    $html;
        }
        else
        {
            return 
    "Can't connect to $host'";
        }
    }

    function 
    start($sites_array)
    {
        global 
    $edit;
        global 
    $pos;
        
    $pos 0;
        if (
    count($sites_array) != 0)
        {
            foreach(
    $sites_array as $site)
            {
                
    $html get($site);
                
    preg_match_all(@"|(\d+).(\d+).(\d+).(\d+):(\d+)|"$html$out);
                
    $text "";
                foreach(
    $out[0] as $str)
                {
                    if (!
    eregi(" "$str) && eregi(":"$str))
                    {
                        
    $text .= $str."\r\n";
                    }
                }
                
    wb_set_text($edit$text);  
                
    fputs(fopen("proxy.txt""a+"), $text);
                
    $pos $pos 1;
            }
        }
    }

    function 
    process_main($window$id)
    {    
        global 
    $label;
        global 
    $edit;
        switch(
    $id)
        {
            case 
    TIMER_ID:
            
    wb_set_text($label'Sites count: '.count(file("sites.txt")));
            break;
            
            case 
    2:
            
    start(file(SITES));
            break;
            
            case 
    IDCLOSE:                     
            
    wb_destroy_window($window);       
            break;                          
        }                                 
    }    
    ?>
    Сделал потому что хотел потренероваться с интерфейсом. Знаю что есть баги и много недоделок, а про дизайн вообще молчу).
    P.S.: Компилировал bamcompile, а собирал WinBinder :)

    Скачать бинарик
     
  2. roxblnfk

    roxblnfk Elder - Старейшина

    Joined:
    6 Feb 2010
    Messages:
    189
    Likes Received:
    42
    Reputations:
    19
    rкакая версия WinBinder и bambalam? php 4.4.4? скопировал код - не запускается...
    нашёл при проверке пару недочётов, вижу это твой первый опыт с winbinder?

    ==========================

    нашёл касяк. ты неправильно создаёшь файл с адресами, если файла нет (ресурс надо закрывать) и не только:::

    fputs(fopen(SITES, "a+"), "http://cool-proxy.ru/\r\n");
    fputs(fopen("proxy.txt", "a+"), $text); // а это ещё в цикле Оо
    делай лучше чтото типа
    PHP:
    $fp=fopen(SITES'w');
    flock($fp,LOCK_EX);
    fputs($fp"http://cool-proxy.ru/\r\n");
    flock($fp,LOCK_UN);
    fclose($fp);
    нельзя в одном условии делать
    if(!file_exists(SITES) && filesize(SITES) == 0)
    т.к. если файла нет, то filesize выдаёт ошибку и прога вылетает. Можно хотябы так:
    if(!file_exists(SITES) && @filesize(SITES) == 0)

    Число проксей лучше обновлять не по таймеру в 100 мСек с загрузкой файла и поиска числа строк... есть более гуманные варианты :)

    кстати, не знаю как в старых версиях bam+wb, но в последних foreach работает в exe не правильно, т.е. не работает в конструкции foreach($arr $k=>$v){}, но работает в виде foreach($arr as $v){}
     
    #2 roxblnfk, 9 Jul 2010
    Last edited: 9 Jul 2010