Перейти к контенту

Есть хак, показывает, кто сегодня был на форуме...


Рекомендуемые сообщения

В принципе, все уже объяснил в заголовке, если есть идеи и реализация, буду благодарен за помощь. Сам хак вот такой:

Most online in a day hack by Manick (IBRESOURCE.COM)

Upload db_hack.php to your root forum directory (where index.php and admin.php are) and run it.
Delete it when finished.

Files Affected:

/sources/Boards.php
/Skin/s*/skin_boards.php
/lang/en/lang_boards.php

----------------------------------------------------------------------------------------------------

Open /Skin/s*/skin_boards.php

Find:

<?php

class skin_boards {

Add below:


function most_online($info) {
global $ibforums;
return <<<EOF

       <tr>
          <td class='category' colspan='2'>{$ibforums->lang['most_day_online']} {$info['count']}</td>
       </tr>
       <tr>
         <td class='forum1' width='5%' valign='middle'><{F_ACTIVE}></td>
         <td class='forum2' width='95%'>{$info['stats']}{$info['list']}</td>
       </tr>


EOF;
}



----------------------------------------------------------------------------------------------------


open /lang/en/lang_boards.php


Find:

<?php

$lang = array (

Add below:

'most_day_online'            =>    "Users active today:",
'most_ever_day'                =>    "Most users ever online in a day was <#COUNT#> on <#DATE#>. | The following members have visted today.",


----------------------------------------------------------------------------------------------------


open /sources/Boards.php

Find:

       if ($stats_html != "")
       {
           $this->output .= $this->html->stats_header();
           $this->output .= $stats_html;
           $this->output .= $this->html->stats_footer();
       }

Add above:

       //*************************************************/
       // Users Active Today mod by Manick (IBRESOURCE.COM)
       //*************************************************/


         $user_time = time() + ($ibforums->vars['TIME_ZONE'] * 3600);
               
         $date = getdate($user_time);
               
         $day   = $date['mday'];
         $month = $date['mon'];
         $year  = $date['year'];


         $the_time = mktime(0,0,0,$month, $day, $year);        

         $info = Array();

         $DB->query("SELECT m.name,m.id,g.prefix,g.suffix, m.last_activity from ibf_members m , ibf_groups g WHERE m.id<>'0' AND m.mgroup=g.g_id AND m.last_activity >= '".$the_time."' ORDER by m.last_activity desc");

         $num    =    0;

         if ($DB->get_num_rows())
         {
             $info['list']    = "<BR>";
         }

         if ($ibforums->input['expand']==1)
         {
             while ($user = $DB->fetch_row())
              {

                 $the_date = $std->get_date( $user['last_activity'] , 'LONG' );
                 $info['list']    .=  "  <span id='highlight'>></span><a title='$the_date' href='{$ibforums->vars['board_url']}/index.{$ibforums->vars['php_ext']}?s={$ibforums->session_id}&act=Profile&MID={$user['id']}'>{$user['prefix']}{$user['name']}{$user['suffix']}</a>";
                 $num++;
             }        
             if ($info['list'])
               {        
                 $info['list'] .="<br>[ <a href='".$this->base_url."&c=".$ibforums->input['c']."&act=".$ibforums->input['act']."'>Hide List</a> ]";
             }
         }
         else
         {
           $num = $DB->get_num_rows();
           $info['list'] = "<br>[ <a href='".$this->base_url."&expand=1&c=".$ibforums->input['c']."&act=".$ibforums->input['act']."'>Show List</a> ]";
         }        

         if ($num > $stats['MOST_MEM_DAY'])
         {
             $DB->query("UPDATE ibf_stats SET MOST_MEM_DAY='".$num."',MOST_MEM_DATE='".time()."'");

             $stats['MOST_MEM_DATE']    =    time();
             $stats['MOST_MEM_DAY']    =    $num;
         }



         $most_mem_time = $std->get_date( $stats['MOST_MEM_DATE'], 'LONG' );

         $ibforums->lang['most_ever_day'] = preg_replace( "/<#COUNT#>/", $stats['MOST_MEM_DAY'] , $ibforums->lang['most_ever_day'] );
         $ibforums->lang['most_ever_day'] = preg_replace( "/<#DATE#>/" , "$most_mem_time"       , $ibforums->lang['most_ever_day'] );

         $info['stats']    =    $ibforums->lang['most_ever_day'];
         $info['count']    =    $num;

         $stats_html    .=    $this->html->most_online($info);



Now, upload all files, rebuild master config for your skin, and rebuild html files from php
files for you skin.

 

Еще две строчки в базу надо добавить...

alter table ibf_stats add MOST_MEM_DAY int(10) DEFAULT '0';
alter table ibf_stats add MOST_MEM_DATE int(10) DEFAULT '0';

Ссылка на комментарий
Поделиться на других сайтах

Короче, я додумался увеличить "за последние 15 минут" на 7800 минут. Практически это тоже самое, что я и хотел... только лучше.

 

Теперь вопрос в другом... как сделать так, чтобы статистика сохранялась? Точнее, чтобы можно было ее в архиве найти (то есть: предыдущие 7800 минут и тд...)

Ссылка на комментарий
Поделиться на других сайтах

B.X

прежде чем создавать хак, всегда надо ответить себе на такие вопросы:

- будет ли он полезен админу

- будет ли он полезен пользователям и не будет ли он их "доставать" такой форум своими "новыми фишками"

- будет ли он грузить форум.

если на все ДА - то тогда, честь и слава такому хаку обеспечены :D)

 

это я все к тому, что ЗАЧЕМ знать кто был в предыдущие 15 минут, кто был в предыдущие 30 минут, кто был в предыдущие 45 минут ...

представляешь СКОЛЬКО НЕНУЖНОЙ ИНФЫ будет храниться в базе ? ;))

какой толк от такой статистики?

 

разве что рекорды накручивать/замерять ....

Ссылка на комментарий
Поделиться на других сайтах

Просто интересно. Хотя идея поставить 7800 все равно провалилась. Имеет-таки Invision скрытую защиту "от дурака". Больше чем 30 минут где-то статистику не держит все-равно...

 

Статистика - важная вещь. Мне просто интересно, кто заходит на сайт, да и все. Что в этом такого? В принципе, успех всяких SpyLog'ов как раз в этом. Они позволяют узнать многое о посетителе...

 

Я просто хочу, чтобы это делалось у меня на сервере, а не на сервере SpyLog'a. На IBPlanet ничего толкового не нашел... там статистика какая-то однобокая... все на зарегестрированных пользователей расчитана...

Ссылка на комментарий
Поделиться на других сайтах

B.X

статистика вещь нужная, но все таки ставить ее в ущерб пользователю и нагрузке на сервер врядли ИМЕЕТ СМЫСЛ.

 

если очень постараться, то можно сделать более-менее нормальную статистику форума по зарегистрированным пользователям (намекаю на свой форум),

если очень надо учесть и гостей, то пожалуй оптимальным вариантом будет установка кода своего счетчика статистики (благо хороших даже бесплатных скриптов статистики хватает) или кода счетчика службы которой ты доверяешь.

ну а если хочешь узнать ну почти все и с 99% актуальностью и точностью, то пожалуй тут поможет только анализирование серверных логов - вебалайзер или Absolute Log manаger кажется.

 

хотя если все же ну очень хочется прямо связать статистику и форум, то можно посоветовать тебе вот этот хак, но его автор ПРЯМО ПРЕДУПРЕЖДАЕТ, что если на форуме народу бывает много - то сервер будет нагружен БОЛЬШЕ обычного.

 

========

IPB logger

========

Creates a text file logging date of access, ip address, url accessed, and browser each time someone accesses IPB. Sometimes when using a free host, you don't have access to the server log files. This basically creates serverlog-style logs, and writes then to a text file. Works independently to IPB.

 

=========================

OPEN INDEX.PHP

=========================

 

FIND:

=========================

 

//-----------------------------------------------

// USER CONFIGURABLE ELEMENTS

//-----------------------------------------------

 

// Root path

 

$root_path = "./";

 

//-----------------------------------------------

// NO USER EDITABLE SECTIONS BELOW

//-----------------------------------------------

 

error_reporting (E_ERROR | E_WARNING | E_PARSE);

set_magic_quotes_runtime(0);

 

=========================

ADD AFTER:

=========================

 

$logfile = "/path/to/log/file"; // Change this to the full/reletive path of the text file you wish to log to

// Get the Variables

$user_date = date("F j, Y, g:i a");

$user_ip = $_SERVER['REMOTE_ADDR'];

$user_pg = $_SERVER['PHP_SELF'];

$user_ref = $_SERVER['HTTP_REFERER'];

$user_agent = $_SERVER['HTTP_USER_AGENT'];

$space = " ";

 

// Put them together

$access_log = $user_date.$space.$user_ip.$space.$user_pg.$space.$user_ref.$space.$user_agent;

 

// Write to file

$fh = fopen($logfile, "a");

fwrite ($fh, "$access_log\n");

fclose ($fh);

 

=========================

END OF MOD

=========================

Users will notice nothing, but their details are logged in the background.

Warning: Could be server intensive, especially if your board is really popular.

Ссылка на комментарий
Поделиться на других сайтах

Я понял смысл. Спасибо... У меня сайт не такой большой, чтобы бояться, что он лопнет от наплыва посетителей...

 

Думаю, что выводить этот лог можно простым include? на любую страницу?

Так как информация постоянно обновляется, то и лог будет обновляться и также при заходе на страницу будут видны изменения...

 

Обновление: Хех... хороший хак. Я его немного доработал и теперь надо сделать все точно также, только в index.php вставить вот этот код:

$logfile = "/home/ваш путь/www/log.txt"; // Change this to the full/reletive path of the text file you wish to log to

// Get the Variables
$user_date = date("j.m.Y - H:i");
$user_ip = $_SERVER['REMOTE_ADDR'];
$user_pg = $_SERVER['PHP_SELF'];
$user_ref = $_SERVER['HTTP_REFERER'];
$user_agent = $_SERVER['HTTP_USER_AGENT'];
$space_a = "<tr><td class=row1>";
$space = "</td><td class=row1>"; 
$space_ip = "Гость [<a href=http://www.ваш путь/index.php?s=&act=modcp&CODE=ip&incoming="; 
$space_href = ">";
$space_hren = "</a>] "; 
$space_signa = "<span class=signature>";
$space_ah = "[<a href=";  
$space_center = "<center>";
$space_d = "</td></tr>";

// Put them together
$access_log = $space_a.$space_ip.$user_ip.$space_href.$user_ip.$space_hren
.$space_signa.$user_agent.$space.$space_ah.$user_ref.$space_href
.$user_ref.$space_hren.$space.$space_center.$user_date.$space.$user_pg.$space_d;

// Write to file
$fh = fopen($logfile, "a");
fwrite ($fh, "$access_log\n");
fclose ($fh);

Так. И теперь в skin_online.php найти:

function Page_end($links) {
global $ibforums;
return <<<EOF
           <!-- End content Table -->

и ниже вставить (при наличии установленного хака include, о нем я уже говорил):

<% INCLUDE "http://www.ваш путь/log.txt" %>

Демо можно посмотреть здесь

Теперь все будет записываться в лог файл. Где люди ходили, что делали. А админ сможет также просмотреть IP.

Ссылка на комментарий
Поделиться на других сайтах

Присоединиться к обсуждению

Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Зарузка...
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.