Автоматичне визначення двигуна форуму. Автоматичне визначення движка форуму Файл index php board

Почнемо відразу з коду основного скрипту:

#!/usr/bin/perl

# which-forum.pl script
# (c) 2010 Alexandr A Alexeev, http://сайт/

use strict;

# Закоментовані рядки - для суворості
# Якщо завдання - зібрати статистику двигунів, залишити як є
# якщо скласти список форумів - розкоментувати

my $data;
$data .= $_ while (<> ) ;

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

/i or
$data =~ /index\.php\?[^""]*showforum=\d+/i) ;
print "vbulletin \n "
if ($data =~ /Powered by:?[^<]+vBulletin[^<]+(?:Version)?/i or
$data =~ /) ;
print "smf \n "
if ($data =~ /]+href="[^"]*http:\/\/(?:www\.)?simplemachines\.org\/?"[^>]*>Powered by SMF/i or
$data =~ /index\.php\?[^""]*board=\d+\.0/i) ;
print "punbb \n "
if ($data =~ /]+href="[^"]*http:\/\/(?:(?:www\.)?punbb\.org|punbb\.informer\.com)\/?"[^>]*> PunBB/i); #or
# $data =~ /viewforum\.php\?[^""]*id=\d+/i);
print "fluxbb \n "
# if($data =~ /viewtopic\.php\?id=\d+/i or
if ( $data =~ /]+href="http:\/\/(?:www\.)fluxbb\.org\/?"[^>]*>FluxBB/i) ;
print "exbb \n "
if ($data =~ /]+href="[^"]*http:\/\/(?:www\.)?exbb\.org\/?"[^>]*>ExBB/i); # or
# $data =~ /forums\.php\?[^""]*forum=\d+/i);
print "yabb \n "
if ($data =~ /]+href="[^"]*http:\/\/(?:www\.)?yabbforum\.com\/?"[^>]*>YaBB/i or
$data =~ /YaBB\.pl\?[^""]*num=\d+/i ) ;
print "dleforum \n "
if ($data =~ /\(Powered By DLE Forum\)<\/title>/i or
$data =~ /]+href="[^"]+(?:http:\/\/(?:www\.)?dle\-files\.ru|act=copyright)[^"]*">DLE Forum<\/a>/i) ;
print "ikonboard \n "
if ($data =~ /]+href="[^"]*http:\/\/(?:www\.)?ikonboard\.com\/?[^"]*"[^>]*>Ikonboard/i or
$data =~ /\n "
if ($data =~ /\n "
# if($data =~ /forums\.php\?fid=\d+/i or
# $data =~ /topic\.php\?fid=\d+/i or
if ($data =~ /]+href="http:\/\/(?:www\.)?flashbb\.net\/?"[^>]*>FlashBB/i) ;
print "stokesit \n "
# if($data =~ /forum\.php\?f=\d+/i or
if ($data =~ /]+href="http:\/\/(?:www\.)?stokesit\.com\.au\/?"[^>]*>[^\/]*Stokes IT/i) ;
print "podium \n "
# if($data =~ /topic\.php\?t=\d+/i or
if ($data =~ /]+href=[""]?http:\/\/(?:www\.)?sopebox\.com\/?[""]?[^>]*>Podium/i) ;
print "usebb \n "
# if($data =~ /forum\.php\?id=\d+/i or
if ($data =~ /]+href="http:\/\/(?:www\.)?usebb\.net\/?"[^>]*>UseBB/i) ;
print "wrforum \n "
# if($data =~ /index\.php\?fid=\d+/i or
if ($data =~ /]+href="http:\/\/(?:www\.)?wr\-script\.ru\/?"[^>]*>WR\-Forum/i) ;
print "yetanotherforumnet \n "
if ($data =~ /Yet Another Forum\.net/i or
$data =~ /default\.aspx\?g=posts&t=\d+/i) ;

Цей та інші скрипти, згадані в пості, ви знайдете у цьому архіві.

Скрипт which-forum.plвивчає код html-сторінки щодо наявності у ньому сигнатур форумного движка. Аналогічний прийом ми використовували при визначенні WordPress та Joomla, але є кілька відмінностей. По-перше, сам скрипт не завантажує код сторінки, а читає його зі stdin або файлу, переданого як аргумент. Це дозволяє завантажити сторінку один раз, наприклад, за допомогою wget, а потім прогнати її через кілька аналізаторів, якщо їх не один. По-друге, у цьому скрипті наявність сигнатури є 100% ознакою движка. Минулого разу наявність сигнатури лише надавала ваги відповідного двигуна і «вигравав» двигун з максимальною вагою. Я вирішив, що в цьому випадку такий підхід лише дарма ускладнить код.

Щоб протестувати роботу скрипта, я провів невелике дослідження. Я склав список з декількох тисяч форумів і прогнав кожен із них через свій скрипт, визначивши тим самим відсоток спрацьовувань програми та популярність різних двигунів.

Для отримання списку форумів я скористався своїм парсером Google. Пошуковій системіпосилалися запити типу

site:forum.*.ru
site:talk.*.ru
site:board.*.ru
site:smf.*.ru
site:phpbb.*.ru
....

і так далі. Повний кодгенератора запитів ви знайдете у файлі gen-forumsearch-urls.pl. Крім зони.ru також використовувалися.su.ua.kz и.by. Минулого разу провести таке дослідження було важко, оскільки сайти WordPress і Joomla не мають подібних сигнатур в URL. Каталоги типу cmsmagazine.ru/catalogue/ не забезпечують достатнього обсягу вибірки. Що таке 600 сайтів на Drupal?

Треба визнати, що результати експерименту мене засмутили. З 12590 досліджуваних сайтів тільки на 7083 двигун був визначений успішно, тобто лише в 56% випадків. Може, я не врахував якогось двигуна? Невже на половині форумів стояв Bitrix? Чи мені більше часу приділити пошуку сигнатур? Загалом, тут потрібні додаткові дослідження.

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

За ними з великим відставанням слідують SMF (5,8%) та DLEForum (5,3%). Мій улюблений punBB виявився лише на 6-му місці (1,64%). Я не радив би сильно довіряти цим цифрам (мовляв, кожен третій форум у рунеті працює на IPB), але певні висновки зробити, звісно, ​​можна.

Наприклад, якщо ви маєте намір робити сайт на форумі і плануєте модифікувати форум, скажімо, платити користувачам по 0.01 $ за кожне повідомлення з автоматичним виведенням коштів раз на тиждень, то вам слід вибрати один з трьох найбільш популярних движків. Чим популярніший форум, тим більше шансів знайти програміста, який добре в ньому розуміється.

Якщо ж істотних змін у движку не передбачається, то можливо сенс вибрати не найпопулярніший движок, наприклад SMF або punBB. Цим ви зменшите кількість хакерських атак на свій форум і кількість спаму, що автоматично розсилається на ньому.

Скриптам для пошуку/визначення форумів також можна знайти не одне практичне застосування. Перше, що спало мені на думку — це відсортувати по ТІЦ упізнані форуми і розмістити на першій сотні пости з посиланнями на один зі своїх сайтів. Однак сотня форумних dofolllow-посилань ніяк не вплинула на ТІЦ (пройшло 2 апдейти), так що краще не витрачати тут час, якщо вас не цікавлять переходи.

Зрозуміло, що застосування скриптів далеко не єдине. Думаю, ви легко придумаєте, як їх можна використовувати.

Certain modules має комунікувати до hardware в ордер до fulfil їхніх tasks. Those modules come with an additional driver layer. Всі driver будуть потрібні на board file до розмови до сучасного hardware.
На комп'ютері файл потребується, щоб він використовувався як його implementation depends not on on use used underlying system (HAL), але також в сучасному hardware configuration (wiring).

Templates

Всі driver використовуються для того, щоб розглянути цей файл з board file. Copying this file to your project directory and implementation the routines is all there is to do.

Supported Boards

Кілька boards мають preddefined hardware on them. Where they are a common board we provide a makefile ( /boards/base/xxx/board.mk) які ви можете включити в свій свій проект makefile. Це буде автоматично включати всі стандартні hardware drivers and board files. Additional pre-defined board files can also be found in /boards/addons.


Файл index.php є ключовим файлом форуму та використовується практично при виконанні всіх дій. Його робота складається з наступних етапів:
1) Підключення конфігураційних файлів database.php та iboard.php.
2) Установка з'єднання з СУБД та отримання доступу до бази даних.
3)Зчитування інформації з cookies користувачаабо з параметрів, переданих скрипту, вилучення інформації про цього користувача з БД та перевірка його автентичності.
4)У разі неуспішної перевірки (або відсутності інформації про користувача) як дані користувача витягуються дані для профілю користувача Guest ( реєстраційний номер - 1).
5)Здійснюється підключення файлів стилю та мови інтерфейсу, визначених користувачему налаштуваннях свого профілю.
6)Якщо в параметрах виклику скрипта є параметр t, то проводиться вилучення з БД даних про зазначену тему та форум, в якому дана темазнаходиться.
7)Якщо в параметрах виклику скрипта є параметр f, то проводиться вилучення з БД даних про форум.
8)Якщо є параметри t або f, проводиться перевірка, чи має користувач достатні права для перегляду відповідного форуму.
9)Здійснюється підключення модуля, зазначеного у параметрі m. Якщо параметр m відсутній, тип модуля визначається залежно від типу розділу, для якого виконується дана дія. Якщо не вказано і тип розділу, то проводиться перевірка, що слід відображати як головної сторінки. У тому випадку, якщо в якості головної сторінки вибрано один із розділів, то буде підключений модуль, який відповідає за відображення розділу відповідного типу, інакше - модуль main.php. Також здійснюється підключення файлу стилю, який має таке ж ім'я, як модуль, що підключається, проте розташований в підкаталозі каталогу styles, відповідного стилю, вибраному в налаштуваннях профілю користувача.
10) Проводиться перевірка параметра a. Якщо він не заданий явно, він оголошується рівним view. Далі, якщо вказано конкретний розділ і параметр a дорівнює view, він замінюється на<имя_раздела>_view.
11) Залежно від запитаної дії (воно вказується в параметрі виклику скрипта a) здійснюється підключення або файлу tmplate1.php (якщо дія не містить префікса do_) або файлу tmplate2.php (інакше). Далі викликаються всі дії, перелічені у відповідному шаблоні, причому замість дії main_action насправді буде викликана дія, вказана в параметрі a.
12)В лог форуму заноситься інформація про виконану дію, ідентифікатор та IP-адресу користувача, що виконав дію.
Також у файлі index.php є функція обробки фатальних помилок, яка призначена для виведення повідомлення про помилку, а також фіксації тексту помилки у файлі error.log.

Завантаження...
Top