FTP Account Parser Дарова всем.Вот скачал тут из раздела халява сборник фтп сервов и мне пришла идея написать маленкий парсер.Маленький да удаленький.Значит осн.возможности: 1)ищет красивенкие домены типа blabla.com а не всякие типа blabla.narod.ru 2)можно поставить фильтр длины домена 3)можно также поискать какое то слово в доменах 4)можно также искать во всех субдоменах,не только в "красивенких" 5)можно сохранить все в файл на сервере 6)выделяет домен одним цветом,акк другим + искомую фразу тосже выделяет 7)делает удобные линки на фтп 8)более подробный мануальчик в скрипте [+] дабавил по вашим просьбам валидатор,теперь,при установке флага valid на 1 (&valid=1),он будет проверять каждый server. Oфф сервера несохраняются,а в онлайн логе это выводится красным квадратом слева.очень удобно. [+] теперь также при режиме валидатора будет показано все содержимое сервака.(javascript:alert) [+] добавил наконец нормальный интерфейс. [+] показывает справа все логи,отпарсенные ранее. [+]в конце парсинга выдает также доменные зоны первого уровня,которые встречались. Screeshot: http://qwyz.freehostia.com/screen.png _____________________________________ http://qwyz.freehostia.com/FTP_Parser.zip _____________________________________
ТС, зачем темы дублировать? http://forum.antichat.ru/thread130318.html Я пост свой тоже сюда скопирую, даже добавлю кое-что... 1. Есть такие функции - isset, error_reporting, ты про них не знаешь? 2. Никогда не пробовал делать код читабелным, не? Читабельный: PHP: <html><body bgcolor=black> <style> a { text-decoration:none; } </style><font color=dcdcdc size=-1 face=verdana>FTP Parser 1.0 By [QwyZ] (for antichat.ru and seclab.ru)<br> <br> Variables: www.your.host.com/parser.php?<font color=orange>z</font>=com&<font color=orange>m</font>=14&<font color=orange>base</font>=ftps.txt&<font color=orange>all</font>=0&<font color=orange>save</font>=yes&<font color=orange>word</font>=freehostia.com<br><br> $z = domain zone (ex. &z=com),for all zones use * (&z=*)<br> $m = maxlength of domain name (ex. &m=14),for all domains use * (&m=*)<br> $base = ftp database (ex. &base=file.txt),bases must to be in "/bases" folder<br> $all = searching at subdomains too (ex. &all=1,&all=0)<br> $save = saving/not saving results to "/queries" folder (ex. &save=yes,&save=no)<br> $word = search word (ex. &word=freehostia.com)<br><font color=blue>___________________________________________________________________</font><br><br> <?php //vars $zone = $_GET['z']; $maxl = $_GET['m']; $i = $_GET['base']; $all = $_GET['all']; $save = $_GET['save']; $sw = $_GET['word']; //vars if ($save == "yes") { $saveTo = fopen("./queries/" . $zone . "." . $maxl . "." . $i . "." . $all . "." . $sw . ".txt", "w+"); fclose($saveTo); } function check_ftps($i, $zone, $maxl, $all, $save, $sw) { $current_base = file("./bases/" . $i); $k = 0; for ($k = 0; $k < count($current_base); $k++) { $current_ftp = $current_base[$k]; if (substr_count($current_ftp, "@") == 1) { $current_ftp = explode("@", $current_ftp); $current_ftp = $current_ftp[1]; if ((substr_count($current_ftp, ".") == 1) || ($all == "1")) { if ((strlen($current_ftp) <= $maxl) || ($maxl == "*")) { if ((strstr($current_ftp, $sw)) || ($sw == "*")) { $suba = explode(".", $current_ftp); $suba = $suba[count($suba) - 1]; $suba = substr($suba, 0, (strlen($suba) - 2)); if (($suba == $zone) || ($zone == "*")) { if (substr($current_base[$k], 0, 6) == "ftp://") { } else { $current_base[$k] = "ftp://" . $current_base[$k]; } $account = explode("@", $current_base[$k]); $lp = $account[0] . "@"; $button = substr($account[1], 0, strlen($account[1]) - 2); $dom = "<font color=orange>" . $account[1] . "</font><br>"; $dom = str_replace($sw, "<b><font color=yellow>" . $sw . "</font></b>", $dom); echo ("<input type=button value=\"Open\" onclick='location.href=\"" . $lp . $button . "\"'> " . $lp . $dom); if ($save == "yes") { $add = fopen("./queries/" . $zone . "." . $maxl . "." . $i . "." . $all . "." . $sw . ".txt", "a+"); fputs($add, $current_base[$k]); fclose($add); } } } } } } } } //call function check_ftps($i, $zone, $maxl, $all, $save, $sw); //call function ?></font> </body> </html> Нечитабельный (твой): PHP: <html><body bgcolor=black> <style> a { text-decoration:none; } </style><font color=dcdcdc size=-1 face=verdana>FTP Parser 1.0 By [QwyZ] (for antichat.ru and seclab.ru)<br> <br> Variables: www.your.host.com/parser.php?<font color=orange>z</font>=com&<font color=orange>m</font>=14&<font color=orange>base</font>=ftps.txt&<font color=orange>all</font>=0&<font color=orange>save</font>=yes&<font color=orange>word</font>=freehostia.com<br><br> $z = domain zone (ex. &z=com),for all zones use * (&z=*)<br> $m = maxlength of domain name (ex. &m=14),for all domains use * (&m=*)<br> $base = ftp database (ex. &base=file.txt),bases must to be in "/bases" folder<br> $all = searching at subdomains too (ex. &all=1,&all=0)<br> $save = saving/not saving results to "/queries" folder (ex. &save=yes,&save=no)<br> $word = search word (ex. &word=freehostia.com)<br><font color=blue>___________________________________________________________________</font><br><br> <?php //vars $zone=$_GET['z']; $maxl=$_GET['m']; $i=$_GET['base']; $all=$_GET['all']; $save=$_GET['save']; $sw=$_GET['word']; //vars if ($save=="yes"){ $saveTo=fopen("./queries/" . $zone . "." . $maxl . "." . $i . "." . $all . "." . $sw . ".txt","w+"); fclose($saveTo);} function check_ftps($i,$zone,$maxl,$all,$save,$sw) { $current_base=file("./bases/" . $i); $k=0; for($k=0;$k<count($current_base);$k++) { $current_ftp=$current_base[$k]; if (substr_count($current_ftp,"@")==1) { $current_ftp=explode("@",$current_ftp); $current_ftp=$current_ftp[1]; if ((substr_count($current_ftp,".")==1) || ($all=="1")) { if ((strlen($current_ftp)<=$maxl) || ($maxl=="*")) { if ((strstr($current_ftp,$sw)) || ($sw=="*")){ $suba=explode(".",$current_ftp); $suba=$suba[count($suba)-1]; $suba=substr($suba,0,(strlen($suba)-2)); if (($suba==$zone) || ($zone=="*")) { if (substr($current_base[$k],0,6)=="ftp://"){}else {$current_base[$k]="ftp://" . $current_base[$k];} $account=explode("@",$current_base[$k]); $lp=$account[0] . "@"; $button=substr($account[1],0,strlen($account[1])-2); $dom="<font color=orange>" . $account[1] . "</font><br>"; $dom=str_replace($sw,"<b><font color=yellow>" . $sw . "</font></b>",$dom); echo("<input type=button value=\"Open\" onclick='location.href=\"" . $lp . $button . "\"'> " . $lp . $dom); if ($save=="yes"){ $add=fopen("./queries/" . $zone . "." . $maxl . "." . $i . "." . $all . "." . $sw . ".txt","a+"); fputs($add,$current_base[$k]); fclose($add);} }}}}}} } //call function check_ftps($i,$zone,$maxl,$all,$save,$sw); //call function ?></font> </body> </html> 3. Функции работы со строками - прошлый век. Сейчас есть регулярки. 4. Про формы не читал никогда? 5. В коде есть строчки вида PHP: if(условие) { #xD кода нету... обычные фигурные скобки } else { #code } 6. Используй switch-case вместо if.
блин я вообщето консультации непросил.как надо будет спрошу,а если ненравится дак я вроде тебя неаставлял его юзать.извини конечно,но твои комментарии излишни.
>>3. Функции работы со строками - прошлый век. Сейчас есть регулярки. неправда, регеспы медленнее функций работы со строками, и если есть возможность решить проблему с помощью доступных функций, регулярки не используют..
Нифига не удобнее. Чем сидеть и задрачивать регулярки, лучше использовать готовое решение, которое 100% будет работать.
По поводу регулярок приведу цитату:«Если у вас есть проблема, и вы решили с ней разобраться с помощью регулярок, то теперь у вас две проблемы». Насчет выложенного кода : 1.Бросилось в глаза огромная вложенность if..else конструкций. 2.Все сделано в 1 функции поэтому последуещее дополнение и улучшение скрипта станет проблематичным. Хотя в принципе [QwyZ] молодец, неплохая идея.
mailbrush, Несоглашусь в некоторых моментах: error_reporting - для тех кто неумеет правильно оформлять код, если нотайсы, значит у вас не предопределены переменные как ето бывает в 90%, а от Варнингов и Фатал ерроров спасаются решением проблеммы а не отключением отображения ошибок. Тоже не согласен, мне самому удобнее регулярками пользоваться но ето не грамотно с точки зрения программирования. И вот момент, несовсем правильный: PHP: if(условие) { #xD кода нету... обычные фигурные скобки } else { #code } Зачем прибегать к такой конструкции если можно сделать все наоборот: Немного не в том направлении работает ТС, ети все функции не актуальны, лучше поработать над nxfntkmyjq сортировкой фтп, к примеру бэды писать в отдельный файл, для дальнейшего анализа, возможно там неправильно записаны фтп, тоесть без префикса ftp:// и тд. Выявлять все фри хосты, анонимные, гостевые, паблик фтп. Вообщем очистить лист от хлама, разделать на доменные зоны - ru, com, org .... Когда работаеш с листом фтп >100k то красивая ссылка и подсветка домена нахрен не нужна, тогда бальше озадачен тем как отсеять паблик хлам.
А вам что то говорит такое понятие - один интерфейс, множество реализаций(пускай это и не совсем обьект)? Если в функции не лепить куски тугово как пластилин говнокода то по моему глубокому имхо "последуещее дополнение и улучшение" ни разу не станет проблематичным.
Ну это если он про isset не знает... Пускай, но это удобнее мне и тебе Вот я об этом и говорил... Это у него в коде так Верное решение...
Ну и причем здесь полиморфизм?Если мы имеем дело с одной функцией.Я писал о таком методе рефракторинга, как группировка кода в отдельную функцию. Смотря что вы понимаете под "куски тугово как пластилин говнокода".
значит нужна вам еще и валидатор добавитb и шоб сразу на доменные зоны итд.?ок,покодю и во второи версии все это добавлю.спасибо за критику итд,хоть в ней ненуждался.кстати меня немного повеселило настойчивое повторение от майлбраша,что я незнаю что такое функция иссет...
Если вам необходимо сделать 1 операцию но вместо нее вы делаете 5(вот это как раз я и понимаю тугим как пластилин говнокодом) и потом что бы повысить читаемость вы начинаете вместо того что бы оптимизировать код заниматься " рефракторинга, как группировка кода" - создавать для нее например отдельный метод, или еще мне очень нравиться создают метод с новым именем и все что в нем делают - это вызывают другой метод(имя новое читаемость повышаеться по их соображениям) - то это имхо - вершина говнокода. Насчет полиморфизма - ну не знаю может интенсиональный контекст и т.д. но насколько я вас понял то вы утверждаете что использование функуции несет за собой проблематичность с дальнейшим добавлением кода и изменениям в его работе, но очень часто результат работы функции нужно обработать по разному - кто мешает вам использывать базисную функция - а результаты ее работы использовать в других функциях не копашась в коде основной? Конечно же разделения кода на законченые функциональные блоки повышает процесс нахождения ошибок и тестирования кода с этим никто не спорит.