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

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


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

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

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.

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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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

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

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