Своя статистика форума phpBB2: кто куда и откуда пришел

Полезные скрипты
Ответить
Аватара пользователя
mihas
Администратор
Сообщения: 1371
Зарегистрирован: 18 авг 2004, 16:58
Откуда: Москва
Контактная информация:

Своя статистика форума phpBB2: кто куда и откуда пришел

Сообщение mihas »

Иногда бывает любопытно посмотреть, не прибегая к таким громоздким инструментам, как Google Analytics, по каким поисковым запросам на какие страницы форума заходили читатели. Analytics массу любопытного оставляет за бортом. Предлагаю несложное компактное решение. На совместимость с phpBB3 пока не тестировалось, но думаю там несложно пару переменных если что в коде поправить.
Итак, первое что нам понадобится - контейнер для хранения статистики. Создадим пустой файл с именем например stat.htm, загрузим его на сервер в каталог форума и назначим атрибуты этого файла 666.
Теперь самое интересное - как страницы форума будут туда записывать информацию. Откроем файл includes\page_tail.php и добавим туда например после строки "global $do_gzip_compress;" следующий кусочек кода:

Код: Выделить всё

//statistika from cielab.xyz
$exampletime = date ("Y.m.d H:m:s A");
$linkone = $_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
$linktwo = $_SERVER['HTTP_REFERER'];
$linkip = getenv("REMOTE_ADDR")."::".getenv("HTTP_USER_AGENT");
$filegal = fopen("stat.htm", "a+");
if (flock($filegal,LOCK_EX))
{
fwrite($filegal,'<a href="http://' . $linkone . '" target="new">forum: ' . $forum_name . ' | ' . $topic_title . '</a> from <a href="' . $linktwo . '" target="new2">' . $linktwo . '</a> | ' . $linkip . ' | ' . $exampletime . '<br /><br />');
flock($filegal,LOCK_UN);
}
fclose($filegal);
//end statistika
Отправим файл на сервер в папку includes, предварительно сбэкапив на всякий случай оригинальный файл page_tail.php.
Теперь каждая страница форума будет записывать в файл stat.htm строчку с названием темы и откуда на нее вошли каким браузером с какого айпишника. Если это поисковый запрос яндекса или гугла, то в большинстве случаев текст запроса легко читается в углу браузера при наведении на эту ссылку.
Обращаемся к файлу stat.htm и радуемся!-)
Очевидно, что регулярно пополняемый файл stat.htm скоро очень раздуется, рекомендую иногда очищать его содержимое. Для этого напишем простой скриптик, назовем его например clear.php и положим в ту же корневую папку форума (или наоборот запрячем куда-нибудь поглубже, но тогда не забудем поправить путь оттуда к файлу stat.htm). Вот содержимое файла clear.php, запуская который вы сможете обнулять статистику в файле stat.htm:

Код: Выделить всё

<?php
$example = date ("\E\m\p Y.m.d - H:m:s A");
//start archiv
$file = fopen("stat.htm", "w"); 
// exclusive lock
if (flock($file,LOCK_EX))
{
fwrite($file,'<p>' . $example . '</p><br>');
// release lock
flock($file,LOCK_UN);
}
fclose($file);
//end archiv
echo ("<a href='http://cielab.xyz/forum/viewtopic.php?t=320'><b>Clear Ready</b></a>");
?>
Отметим, что храниться в файле статистики будут не просто немые гиперлинки на страницы форума, а говорящие названия тем форума, к которым читатели обращались. Для этого задействуются переменные форума phpbb2 $forum_name и $topic_title. Возможно в phpBB3 эти переменные названы иначе, я не проверял, кто проверит - пишите.
Аватара пользователя
mihas
Администратор
Сообщения: 1371
Зарегистрирован: 18 авг 2004, 16:58
Откуда: Москва
Контактная информация:

Реализация для phpbb3

Сообщение mihas »

Более актуально проделать то же самое для форума phpBB3.
Вот как это просто сделать. Берем файл из корня форума viewtopic.php, листаем до конца и после строк:
  • // Output the page
    page_header($user->lang['VIEW_TOPIC'] . ' - ' . $topic_data['topic_title'], true, $forum_id);
вставляем следующий код:

Код: Выделить всё

//statistika
$exampletime = date ("Y.m.d H:m:s A");
$linkone = $_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
$linktwo = $_SERVER['HTTP_REFERER'];
$linkip = getenv("REMOTE_ADDR")."::".getenv("HTTP_USER_AGENT");
if (preg_match("/bot/i", $linkip) or preg_match("/Crawler/i", $linkip)) {}
else {
if (preg_match("/Mediapartners/i", $linkip)) {}
else {
if (preg_match("/spider/i", $linkip)) {}
else {
if (preg_match("/f=/i", $linktwo)) {}
else {
if (preg_match("/t=/i", $linkone)) {
$filegal = fopen("statistika.php", "a+");
if (flock($filegal,LOCK_EX))
{
fwrite($filegal,'<a href="http://' . $linkone . '" target="new">' . $topic_data['topic_title'] . ' </a> from <a href="' . $linktwo . '" target="new2">' . $linktwo . '</a> | ' . $linkip . ' | ' . $exampletime . '<br /><br />');
flock($filegal,LOCK_UN);
}
fclose($filegal);
}}}}}
//end statistika
Здесь есть несколько условий, отсекающих от занесение в статистику поисковых роботов Crawler, spider, bot, поискового робота Google и рекламного робота AdSense - словом на что хватило фантазии, можете дописать эту часть на свое усмотрение. Так же не учитываются переходы внутри форума к теме а вот заход по поисковому запросу попадет в статистику. Для этого отсекаются адреса входа с типичным для форума постфиксом "f=".
Не забудьте создать на сервере в корневой папке форума файл statistika.php и назначить ему атрибуты на запись. Как обнулять файл статистики написано в предыдущем посте.
Главное отличие этого скрипта для phpBB3 от того, что работал в phpBB2 - другая переменная, описывающая название темы, здесь она - $topic_data['topic_title'] вместо $topic_title из скрипта для второй версии форума. Хочется же видеть в статистике не просто ссылку а именно название темы.
Ответить

Вернуться в «PHP»