Автоматично откриване на двигателя на форума. Автоматично откриване на двигателя на форума Данни от индексната php дъска


Файлът index.php е ключовият файл на форума и се използва за почти всички действия. Работата му се състои от следните етапи:
1) Връзка конфигурационни файловебаза данни.php и iboard.php.
2) Установяване на връзка към СУБД и получаване на достъп до базата данни.
3) Четене на информация от потребителски бисквиткиили от параметрите, предадени на скрипта, извличайки информация за този потребител от базата данни и проверявайки неговата автентичност.
4) В случай на неуспешна проверка (или липсваща потребителска информация), данните за потребителския профил на гост се извличат като потребителски данни ( регистрационен номер - 1).
5) Файловете за стил и език на интерфейса са свързани, дефиниран от потребителяв настройките на вашия профил.
6) Ако параметърът t присъства в параметрите на извикването на скрипта, тогава данните за определената тема и форум, в които тази темаразположен.
7) Ако параметърът f присъства в параметрите на извикването на скрипта, тогава данните за форума се извличат от базата данни.
8) Ако параметрите t или f присъстват, ще бъде направена проверка, за да се види дали потребителят има достатъчно права, за да види съответния форум.
9) Модулът, зададен в параметър m, е свързан. Ако параметърът m липсва, тогава типът на модула се определя в зависимост от типа на дяла, за който това действие. Ако типът на раздела не е посочен, тогава се прави проверка, за да се види какво трябва да се показва като начална страница. Ако една от секциите е избрана като главна страница, тогава ще бъде свързан модулът, отговорен за показване на секцията от съответния тип, в противен случай ще бъде свързан модулът main.php. Включен е и стилов файл, който има същото име като приставката, но се намира в поддиректория на директорията за стилове, съответстваща на стила, избран в настройките на потребителския профил.
10) Параметър a се проверява. Ако не е посочено изрично, то се декларира равно на view. След това, ако е указан конкретен раздел и параметърът a е изглед, той се заменя с<имя_раздела>_изглед.
11) В зависимост от исканото действие (то е посочено в параметъра за извикване на скрипта) се свързва или файлът tmplate1.php (ако действието не съдържа префикса do_), или файлът tmplate2.php (в противен случай). След това се извикват всички действия, изброени в съответния шаблон, и вместо действието main_action действително ще бъде извикано действието, посочено в параметъра a.
12) Дневникът на форума съдържа информация за извършеното действие, идентификатора и IP адреса на потребителя, извършил действието.
Също така във файла index.php има функция за обработка на фатални грешки, която е предназначена да показва съобщение за грешка, както и да записва текста на грешката във файла error.log.

Нека започнем веднага с основния код на скрипта:

#!/usr/bin/perl

# скрипт which-forum.pl
# (c) 2010 Александър Алексеев, http://site/

използвайте строг;

# коментирани реда - за строгост
# ако задачата е да се съберат статистически данни за двигателя, оставете я както е
# ако правите списък с форуми - разкоментирайте

моите $данни;
$data .= $_while (<> ) ;

# проверете колко е Осъществено от phpBB без връзка в долния колонтитул
печат "phpbb \н"
if ($data =~ /]+href="[^"]*http:\/\/(?:www\.)?phpbb\.com\/?"[^>]*>phpBB/iили
# $data =~ /viewforum\.php\?[^""]*f=\d+/i или
$data =~ /phpBB\-SEO/i или
$данни =~ /) ;
печат "ipb \н"
if ($data =~ /]+href="[^"]*http:\/\/(?:www\.)?invision(?:board|power)\.com\/?[^"]*"[^>]*> [^<]*IP\.Board/i или
$данни =~ /]+href="[^"]*http:\/\/(?:www\.)?invisionboard\.com\/?"[^>]*>Invision Power Board/iили
$данни =~ /

/iили
$данни =~ /index\.php\?[^""]*showforum=\d+/i) ;
отпечатайте "vbulletin \н"
if ($data =~ /Осъществено от:?[^<]+vBulletin[^<]+(?:Version)?/i или
$данни =~ /) ;
печат "smf \н"
if ($data =~ /]+href="[^"]*http:\/\/(?:www\.)?simplemachines\.org\/?"[^>]*>Осъществено от SMF/iили
$данни =~ /index\.php\?[^""]*board=\d+\.0/i) ;
печат "punbb \н"
if ($data =~ /]+href="[^"]*http:\/\/(?:(?:www\.)?punbb\.org|punbb\.informer\.com)\/?"[^>]*> PunBB/i) ; #или
# $data =~ /viewforum\.php\?[^""]*id=\d+/i);
отпечатайте "fluxbb \н"
# if($data =~ /viewtopic\.php\?id=\d+/i или
if ($data =~ /]+href="http:\/\/(?:www\.)fluxbb\.org\/?"[^>]*>FluxBB/i) ;
печат "exbb \н"
if ($data =~ /]+href="[^"]*http:\/\/(?:www\.)?exbb\.org\/?"[^>]*>ExBB/i) ; # или
# $data =~ /forums\.php\?[^""]*forum=\d+/i);
печат "yabb \н"
if ($data =~ /]+href="[^"]*http:\/\/(?:www\.)?yabbforum\.com\/?"[^>]*>YaBB/iили
$data =~ /YaBB\.pl\?[^""]*num=\d+/i ) ;
печат "dleforum \н"
if ($data =~ /\(Осъществено от DLE форум\)<\/title>/iили
$данни =~ /]+href="[^"]+(?:http:\/\/(?:www\.)?dle\-files\.ru|act=copyright)[^"]*">DLE форум<\/a>/i) ;
печат "ikonboard \н"
if ($data =~ /]+href="[^"]*http:\/\/(?:www\.)?ikonboard\.com\/?[^"]*"[^>]*>Ikonboard/iили
$данни =~ /\н"
if ($data =~ /\н"
# if($data =~ /forums\.php\?fid=\d+/i или
# $data =~ /topic\.php\?fid=\d+/i или
if ($data =~ /]+href="http:\/\/(?:www\.)?flashbb\.net\/?"[^>]*>FlashBB/i) ;
печат "stokesit \н"
# if($data =~ /forum\.php\?f=\d+/i или
if ($data =~ /]+href="http:\/\/(?:www\.)?stokesit\.com\.au\/?"[^>]*>[^\/]*Stokes IT/i) ;
печат "подиум \н"
# if($data =~ /topic\.php\?t=\d+/i или
if ($data =~ /]+href=[""]?http:\/\/(?:www\.)?sopebox\.com\/?[""]?[^>]*>Подиум/i) ;
печат "usebb \н"
# if($data =~ /forum\.php\?id=\d+/i или
if ($data =~ /]+href="http:\/\/(?:www\.)?usebb\.net\/?"[^>]*>UseBB/i) ;
печат "wrforum \н"
# if($data =~ /index\.php\?fid=\d+/i или
if ($data =~ /]+href="http:\/\/(?:www\.)?wr\-script\.ru\/?"[^>]*>WR\-Forum/i) ;
печат "yetanotherforumnet \н"
ако ($data =~ /Още един форум\.net/i или
$данни =~ /по подразбиране\.aspx\?g=posts&t=\d+/i) ;

Ще намерите този и други скриптове, споменати в публикацията в този архив.

Скрипт който-форум.plпроверява кода на HTML страницата, за да види дали съдържа подписи на двигателя на форума. Използвахме подобна техника, когато дефинирахме WordPress и Joomla, но има няколко разлики. Първо, самият скрипт не зарежда кода на страницата, а го чете от stdin или файл, подаден като аргумент. Това ви позволява да изтеглите страницата веднъж, например с помощта на wget, и след това да я пуснете през няколко анализатора, ако имаме повече от един. Второ, в този скрипт наличието на подпис е 100% знак на двигателя. Последният път наличието на подпис само добави тежест към съответния двигател и двигателят с най-голямо тегло „спечели“. Реших, че в този случай подобен подход само ще усложни ненужно кода.

За да тествам сценария, направих някои изследвания. Съставих списък от няколко хиляди форума и прекарах всеки от тях през моя скрипт, като по този начин определих процента на програмните отговори и популярността на различните двигатели.

За да получа списъка с форуми, използвах моя анализатор на Google. Търсачкаискания като

сайт: форум.*.ru
сайт: talk.*.ru
сайт: борд.*.ru
сайт: smf.*.ru
сайт:phpbb.*.ru
....

и така нататък. Пълен кодще намерите генератора на заявки във файла gen-forumsearch-urls.pl. Освен zone.ru са използвани и .su .ua .kz и .by. Последният път беше трудно да се проведе подобно проучване, тъй като сайтовете на WordPress и Joomla нямат такива подписи в URL адреса. Каталози като cmsmagazine.ru/catalogue/ не осигуряват достатъчен размер на извадката. Какво е 600 Drupal сайта?

Трябва да призная, резултатите от експеримента ме разочароваха. От изследваните 12 590 сайта, двигателят е идентифициран успешно само в 7 083, тоест само в 56% от случаите. Може би не съм взел предвид някой двигател? Вярно ли беше, че половината от форумите имат инсталиран Bitrix? Или трябваше да отделя повече време за търсене на подписи? По принцип тук са необходими допълнителни изследвания.

Сред 56% от успешно идентифицираните машини, най-популярните, както се очакваше, бяха IPB (31%), phpBB (26,6%) и vBulletin (26,5%)

Следват ги с голямо изоставане SMF (5.8%) и DLEForum (5.3%). Моят любим punBB беше едва на 6-то място (1,64%). Не бих препоръчал да се вярва много на тези цифри (казват, че всеки трети форум в RuNet работи на IPB), но някои изводи, разбира се, могат да бъдат направени.

Например, ако възнамерявате да направите сайт на форумна машина и планирате да модифицирате форума, да речем, да плащате на потребителите $0,01 за всяко съобщение с автоматично изтегляне на средства веднъж седмично, тогава трябва да изберете една от трите най-популярни машини. Колкото по-популярен е форумът, толкова по-големи са шансовете да намерите програмист, който го познава добре.

Ако не се очакват значителни промени в двигателя, тогава може да има смисъл да изберете по-малко популярен двигател, например SMF или punBB. Това ще намали броя на хакерските атаки към вашия форум и количеството спам, изпращан автоматично в него.

Скриптове за търсене/идентифициране на форуми също могат да бъдат намерени в повече от един практическа употреба. Първото нещо, което ми хрумна, беше да сортирам идентифицираните форуми по TIC и да публикувам на първите сто публикации с връзки към един от моите сайтове. Въпреки това, стотици форумни dofollow връзки не повлияха на TCI по никакъв начин (2 актуализации са минали), така че е по-добре да не губите време тук, освен ако не се интересувате от преходи.

Ясно е, че споменатото използване на скриптове далеч не е единственото. Мисля, че лесно можете да разберете как иначе можете да ги използвате.

Определено модулитрябва да комуникират с хардуера, за да изпълнят задачите си. Тези модули идват с допълнителен драйверен слой. След това всеки драйвер се нуждае от файл на борда, за да общува с действителния хардуер.
Файлът на платката трябва да бъде предоставен от потребителя, тъй като изпълнението му зависи не само от използваната основна система (HAL), но и от действителната хардуерна конфигурация (окабеляване).

Шаблони

Всеки драйвер предоставя шаблон на своя бордов файл. Всичко, което трябва да направите, е копирането на този файл в директорията на вашия проект и внедряването на рутинните процедури. Имайте предвид, че трябва да премахнете частта _template от името на файла.

Поддържани табла

Някои платки имат предварително дефиниран хардуер. Когато те са обща дъска, ние предоставяме makefile ( /boards/base/xxx/board.mk), които можете да включите във вашия собствен проект makefile. Това автоматично ще включва всички стандартни хардуерни драйвери и файлове на платката. Допълнителни предварително дефинирани файлове на борда също могат да бъдат намерени в /дъски/добавки.



Зареждане...
Връх