B.X Опубликовано 15 Мая 2003 Жалоба Поделиться Опубликовано 15 Мая 2003 В принципе, все уже объяснил в заголовке, если есть идеи и реализация, буду благодарен за помощь. Сам хак вот такой: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'; Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
B.X Опубликовано 15 Мая 2003 Автор Жалоба Поделиться Опубликовано 15 Мая 2003 Короче, я додумался увеличить "за последние 15 минут" на 7800 минут. Практически это тоже самое, что я и хотел... только лучше. Теперь вопрос в другом... как сделать так, чтобы статистика сохранялась? Точнее, чтобы можно было ее в архиве найти (то есть: предыдущие 7800 минут и тд...) Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
WishMaster Опубликовано 15 Мая 2003 Жалоба Поделиться Опубликовано 15 Мая 2003 B.X прежде чем создавать хак, всегда надо ответить себе на такие вопросы:- будет ли он полезен админу- будет ли он полезен пользователям и не будет ли он их "доставать" такой форум своими "новыми фишками"- будет ли он грузить форум.если на все ДА - то тогда, честь и слава такому хаку обеспечены ) это я все к тому, что ЗАЧЕМ знать кто был в предыдущие 15 минут, кто был в предыдущие 30 минут, кто был в предыдущие 45 минут ...представляешь СКОЛЬКО НЕНУЖНОЙ ИНФЫ будет храниться в базе ? )какой толк от такой статистики? разве что рекорды накручивать/замерять .... Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
B.X Опубликовано 15 Мая 2003 Автор Жалоба Поделиться Опубликовано 15 Мая 2003 Просто интересно. Хотя идея поставить 7800 все равно провалилась. Имеет-таки Invision скрытую защиту "от дурака". Больше чем 30 минут где-то статистику не держит все-равно... Статистика - важная вещь. Мне просто интересно, кто заходит на сайт, да и все. Что в этом такого? В принципе, успех всяких SpyLog'ов как раз в этом. Они позволяют узнать многое о посетителе... Я просто хочу, чтобы это делалось у меня на сервере, а не на сервере SpyLog'a. На IBPlanet ничего толкового не нашел... там статистика какая-то однобокая... все на зарегестрированных пользователей расчитана... Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
WishMaster Опубликовано 15 Мая 2003 Жалоба Поделиться Опубликовано 15 Мая 2003 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. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
B.X Опубликовано 15 Мая 2003 Автор Жалоба Поделиться Опубликовано 15 Мая 2003 Я понял смысл. Спасибо... У меня сайт не такой большой, чтобы бояться, что он лопнет от наплыва посетителей... Думаю, что выводить этот лог можно простым 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. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Рекомендуемые сообщения
Присоединиться к обсуждению
Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.