Хак, точнее скрипт "Расширенная статистика"Как альтернатива логам в админке
Текущий рейтинг темы: Нет
JESUS
Новичок
 Откуда: Минск Всего сообщений: 249 Рейтинг пользователя: 0 Дата регистрации на форуме: 10 сен. 2003
|
Профиль | Сообщить модератору | ИгнорироватьNEW! Сообщение отправлено: 18 ноября 2003 9:49
Шаг первый: Создаем файл [B]stats.cgi[/B] со следующим кодом:
<br>#!/usr/bin/perl<p>####################################################################<br># Advanced Stats for Ikonboard v2.х<br>#<br># Written by ST8 <st8@q3f.net><br># Translated & Edited by JESUS <jesus@tut.by><br>#####################################################################<p><br>use CGI::Carp "fatalsToBrowser"; # Output errors to browser<br>use CGI qw(:standard); # Saves loads of work<br>$CGI::POST_MAX=1024 * 300; # limit post data<br>$CGI::DISABLE_UPLOADS = 1; # Disable uploads<p>eval {<br>($0 =~ m,(.*)/[^/]+,) and unshift (@INC, "$1");<br>($0 =~ m,(.*)\[^\]+,) and unshift (@INC, "$1");<br>require "ikon.lib"; # Require ikonboard ()<br>require "data/progs.cgi"; # Require prog names<br>require "data/boardinfo.cgi"; # Require board info<br>require "data/styles.cgi"; # Require styles info<br>};<br>if ($@) {<br>print header(-charset=>$forumcharset); print start_html(-title=>"Ошибка!");<br>print "Невозможно найти файлы: $@\nЕсли Вы используете Windows NT, возможно придется прописать полный путь в каждый оператор require во всех скриптах";<br>print end_html; exit;<br>}<br>my $q = new CGI;<p>open(LOGFILE, "data/stats.log") or die "Невозможно открыть файл $!";<br>@logdata = <LOGFILE>;<br>close(LOGFILE);<p>foreach $log (@logdata) {<br>($name, $time, $location, $referer, $ip, $browser) = split(/\|/, $log);<br>push(@name, $name);<br>push(@time, $time);<br>push(@location, $location);<br>push(@referer, $referer);<br>push(@browser, $browser);<br>push(@ip, $ip);<br>}<p><br>$action = $q->param('action');<br>if ($action eq "page") { &pagestats; }<br>elsif ($action eq "member") { &memberstats; }<br>elsif ($action eq "referer") { &refererstats; }<br>elsif ($action eq "browos") { &browosstats; }<br>elsif ($action eq "time") { ×tats; }<br>elsif ($action eq "admin") { &admin; }<br>elsif ($action eq "setadmin") { &setadmin; }<br>else { &overview; }<p>$output .= qq~<br><table width="$tablewidth" align=center cellspacing=0 cellpadding=1 border=0 bgcolor=$titleborder><br><tr><td><table width=100% cellspacing=0 cellpadding=4 border=0><tr><td valign="middle" bgcolor=$menubackground><br><font face=$font color=$menufontcolor size=1><br><center><b>Статистика:</b> <a href=$boardurl/stats.cgi>Общая</a> | <a href=$boardurl/stats.cgi?action=page>По страницам</a> | <a href=$boardurl/stats.cgi?action=member>По участникам</a> | <a href=$boardurl/stats.cgi?action=referer>По ссылкам</a> | <a href=$boardurl/stats.cgi?action=browos>По браузерам/ОС</a> | <a href=$boardurl/stats.cgi?action=time>По времени</a> | <a href=$boardurl/stats.cgi?action=admin>Администрирование</a></center></font></td></tr></table></td></tr></table><br><br><table cellpadding=0 cellspacing=0 border=0 width=$tablewidth align=center><br><tr><td width=30% rowspan=2><img src="$imagesurl/images/$boardlogo" border=0></td><br><td align=left valign=top><font face="$font" color=$fontcolormisc size=2><font face="$font" color=$fontcolormisc size=2><br> <img src="$imagesurl/images/closedfold.gif" border=0><a href="$forumsummaryprog"> $boardname</a><br><br> <img src="$imagesurl/images/bar.gif" border=0><img src="$imagesurl/images/openfold.gif" border=0> Развернутая статистика: $stattype</td></tr></tr></table><br><br><table width=100% cellpadding=4 cellspacing=1 border=0>~;<p>$output .= $statsout;<p>print header(-charset=>$forumcharset);<p>$boardname = "$boardname > Развернутая статистика > $stattype";<p>&output(<br>-Title => $boardname, <br>-ToPrint => $output, <br>-Version => $versionnumber <br>);<p><br>##############################################<br>######## Subroutes (Page Stats)<p>sub pagestats {<p>foreach $location (@location) {<br>$location =~ s/Viewing:\s//isg;<br>$location =~ s/Viewing\s//isg;<br>$greploc = $location;<br>$greploc =~ s/\?/\?/isg;<br>$greploc =~ s/\&/\&/isg;<br>$greploc =~ s/\(/\(/isg;<br>$greploc =~ s/\)/\)/isg;<br>if (grep(/$greploc/, @savedpages)) {<br> $arrsize = @savedpages;<br> for ($i = 0; $i <= $arrsize; $i++) {<br> if ($location eq $savedpages[$i]) {<br> $savedcount[$i]++;<br> }<br>}<br>} else {<br> push (@savedpages, $location);<br> $savedcount[$#savedpages] = 1;<br>}<br>}<p>for ($i = 0; $i <= $#savedpages; $i++) {<br>if ($savedpages[$i] && $savedcount[$i]) {<br> $itemtosave = "$savedcount[$i]|$savedpages[$i]";<br>push (@savedpage, $itemtosave);<br>}<br>}<br>$stattype = "по страницам";<br>$statsout .= qq~<br><tr height=15><td width=50% valign=middle align=center nowrap bgcolor=$menubackground><font face="$font" color=$catfontcolor size=2><b>Страница</b></font></td><br><td valign=middle align=center nowrap bgcolor=$menubackground><font face="$font" color=$catfontcolor size=2><b>Просмотры</b></font></td><br><td valign=middle align=center nowrap bgcolor=$menubackground><font face="$font" color=$catfontcolor size=2><b>В процентах</b></font></td></tr>~;<p>@savedpage = sort { $b <=> $a } @savedpage;<br>$totalvisits = sum(\@savedcount);<br>foreach $page (@savedpage) {<br>($count, $page) = split(/\|/, $page);<br>$percent = ($count / $totalvisits) * 100;<br>$percent = sprintf("%01d",$percent);<br>$picper = $percent * 5;<br>$statsout .= qq~<br><tr><td bgcolor=$forumcolortwo width=50%><font face="$font" color=$forumfontcolor size=1>$page</font></td><br><td bgcolor=$forumcolortwo align=center><font face="$font" color=$forumfontcolor size=2>$count</font></td><br><td bgcolor=$forumcolortwo><font face="$font" color=$forumfontcolor size=1><img src=$imagesurl/images/bg.gif width=$picper height=5> ($percent%)</font></td></tr><br>~;<br>}<br>$statsout .= qq~<tr><td colspan=3 bgcolor=$forumcolortwo><font face="$font" color=$forumfontcolor size=2><br>Общее количество просмотренных страниц: $totalvisits</font></td></tr></table>~;<br>return $statsout;<br>} # end of page stats<p><p>##############################################<br>######## Subroutes (Member Stats)<p>sub memberstats {<p>foreach $member (@name) {<br>if (grep(/$member/, @savednames)) {<br> $arrsize = @savednames;<br> for ($i = 0; $i <= $arrsize; $i++) {<br> if ($member eq $savednames[$i]) {<br> $savedcount[$i]++;<br> }<br>}<br>} else {<br> push (@savednames, $member);<br> $savedcount[$#savednames] = 1;<br>}<br>}<p>for ($i = 0; $i <= $#savednames; $i++) {<br>if ($savednames[$i] && $savedcount[$i]) {<br> $itemtosave = "$savedcount[$i]|$savednames[$i]";<br>push (@savedname, $itemtosave);<br>}<br>}<br>$stattype = "по участникам";<br>$statsout .= qq~<br><tr height=15><td width=50% valign=middle align=center nowrap bgcolor=$menubackground><font face="$font" color=$catfontcolor size=2><b>Участник</b></font></td><br><td valign=middle align=center nowrap bgcolor=$menubackground><font face="$font" color=$catfontcolor size=2><b>Просмотры</b></font></td><br><td valign=middle align=center nowrap bgcolor=$menubackground><font face="$font" color=$catfontcolor size=2><b>В процентах</b></font></td></tr>~;<p>@savedname = sort { $b <=> $a } @savedname;<br>$totalvisits = sum(\@savedcount);<br>foreach $member (@savedname) {<br>($count, $name) = split(/\|/, $member);<br>$percent = ($count / $totalvisits) * 100;<br>$percent = sprintf("%01d",$percent);<br>$picper = $percent * 4;<br>$statsout .= qq~<br><tr><td bgcolor=$forumcolortwo width=50%><font face="$font" color=$forumfontcolor size=1>$name</font></td><br><td bgcolor=$forumcolortwo align=center><font face="$font" color=$forumfontcolor size=2>$count</font></td><br><td bgcolor=$forumcolortwo><font face="$font" color=$forumfontcolor size=1><img src=$imagesurl/images/bg.gif width=$picper height=5> ($percent%)</font></td></tr><br>~;<br>}<br>$statsout .= qq~<tr><td colspan=3 bgcolor=$forumcolortwo><font face="$font" color=$forumfontcolor size=2>Всего визитов: $totalvisits</font></td></tr></table>~;<p>return $statsout;<br>} # end of member stats<p><br>##############################################<br>######## Subroutes (Referer Stats)<p>sub refererstats {<p>foreach $referer (@referer) {<br>$grepref = $referer;<br>$grepref =~ s/\?/\?/isg;<br>$grepref =~ s/\&/\&/isg;<br>$grepref =~ s/\(/\(/isg;<br>$grepref =~ s/\)/\)/isg;<br>if (grep(/$grepref/, @savedreferer)) {<br> $arrsize = @savedreferer;<br> for ($i = 0; $i <= $arrsize; $i++) {<br> if ($referer eq $savedreferer[$i]) {<br> $savedcount[$i]++;<br> }<br>}<br>} else {<br> unless ($referer =~ /scripting.q3f.net/isg) {<br> push (@savedreferer, $referer);<br> $savedcount[$#savedreferer] = 1;<br> }<br>}<br>}<p>for ($i = 0; $i <= $#savedreferer; $i++) {<br>if ($savedreferer[$i] && $savedcount[$i]) {<br> $itemtosave = "$savedcount[$i]|$savedreferer[$i]";<br>push (@savedrefer, $itemtosave);<br>}<br>}<br>$stattype = "по сайтам";<br>$statsout .= qq~<tr height=15><td width=50% valign=middle align=center nowrap bgcolor=$menubackground><font face="$font" color=$catfontcolor size=2><b>Сайты</b></font></td><br><td valign=middle align=center nowrap bgcolor=$menubackground><font face="$font" color=$catfontcolor size=2><b>Количество</b></font></td><br><td valign=middle align=center nowrap bgcolor=$menubackground><font face="$font" color=$catfontcolor size=2><b>В процентах</b></font></td></tr>~;<p>@savedrefer = sort { $b <=> $a } @savedrefer;<br>$totalvisits = sum(\@savedcount);<br>foreach $referer (@savedrefer) {<br>($count, $name) = split(/\|/, $referer);<br>$percent = ($count / $totalvisits) * 100;<br>$percent = sprintf("%01d",$percent);<br>$picper = $percent * 4;<br>$statsout .= qq~<tr><td bgcolor=$forumcolortwo width=50%><font face="$font" color=$forumfontcolor size=1><a href=$name target=_blank>$name</a></font></td><br><td bgcolor=$forumcolortwo align=center><font face="$font" color=$forumfontcolor size=2>$count</font></td><br><td bgcolor=$forumcolortwo><font face="$font" color=$forumfontcolor size=1><img src=$imagesurl/images/bg.gif width=$picper height=5> ($percent%)</font></td></tr>~;<br>}<br>$statsout .= qq~<tr><td colspan=3 bgcolor=$forumcolortwo><font face="$font" color=$forumfontcolor size=2><br>Общее количество ссылающихся сайтов: $totalvisits</font></td></tr></table>~;<p>return $statsout;<br>} # end of referer stats<p><br>##############################################<br>######## Subroutes (Browser Stats)<p>sub browosstats {<p>foreach $browser (@browser) {<br>$browser =~ s/compatible;//isg;<br>$browser =~ s/Mozilla\/4.0//isg;<br>$browser =~ s/\(//isg;<br>$browser =~ s/\)//isg;<br>$grepbrow = $browser;<br>$grepbrow =~ s/\[/\[/isg;<br>$grepbrow =~ s/\]/\]/isg;<br>if (grep(/$grepbrow/, @savedbrowsers)) {<br> $arrsize = @savedbrowsers;<br> for ($i = 0; $i <= $arrsize; $i++) {<br> if ($browser eq $savedbrowsers[$i]) {<br> $savedcount[$i]++;<br> }<br>}<br>} else {<br> push (@savedbrowsers, $browser);<br> $savedcount[$#savedbrowsers] = 1;<br>}<br>}<p>for ($i = 0; $i <= $#savedbrowsers; $i++) {<br>if ($savedbrowsers[$i] && $savedcount[$i]) {<br> $itemtosave = "$savedcount[$i]|$savedbrowsers[$i]";<br>push (@savedbrowser, $itemtosave);<br>}<br>}<br>$stattype = "по браузерам/ОС";<br>$statsout .= qq~<br><tr height=15><td width=50% valign=middle align=center bgcolor="$menubackground" nowrap><font face="$font" color=$catfontcolor size=2><b>Браузер/ОС</b></font></td><br><td valign=middle align=center bgcolor="$menubackground" nowrap><font face="$font" color=$catfontcolor size=2><b>Количество</b></font></td><br><td valign=middle align=center bgcolor="$menubackground" nowrap><font face="$font" color=$catfontcolor size=2><b>В процентах</b></font></td></tr>~;<p>@savedbrowser = sort { $b <=> $a } @savedbrowser;<br>$totalvisits = sum(\@savedcount);<br>foreach $browser (@savedbrowser) {<br>($count, $browser) = split(/\|/, $browser);<br>$percent = ($count / $totalvisits) * 100;<br>$percent = sprintf("%01d",$percent);<br>$picper = $percent * 4;<br>$statsout .= qq~<tr><td bgcolor=$forumcolortwo width=50%><font face="$font" color=$forumfontcolor size=1>$browser</font></td><br><td bgcolor=$forumcolortwo align=center><font face="$font" color=$forumfontcolor size=2>$count</font></td><br><td bgcolor=$forumcolortwo><font face="$font" color=$forumfontcolor size=1><img src=$imagesurl/images/bg.gif width=$picper height=5> ($percent%)</font></td></tr>~;<br>}<p>$statsout .= qq~<tr><td colspan=3 bgcolor=$forumcolortwo><font face="$font" color=$forumfontcolor size=2>Всего записей: $totalvisits</font></td></tr></table>~;<p>return $statsout;<br>} # end of browser/os stats<p><br>##############################################<br>######## Subroutes (Overview)<p>sub overview {<br>foreach $ip (@ip) {<br>unless(grep(/$ip/, @savedips)) {<br>push (@savedips, $ip);<br>}<br>}<p>foreach $referer (@referer) {<br>$grepref = $referer;<br>$grepref =~ s/\?/\?/isg;<br>$grepref =~ s/\&/\&/isg;<br>$grepref =~ s/\(/\(/isg;<br>$grepref =~ s/\)/\)/isg;<br>unless(grep(/$grepref/, @savedreferer)) {<br>push (@savedreferer, $referer);<br>}<br>}<p>$stattype = "общая";<br>$firstpost = $time[0];<br>$firstpost = $firstpost + ($timedifferencevalue*3600) + ($timezone*3600);<br>$firstpost = &dateformat("$firstpost");<br>$uniques = @savedips;<br>$impressions = @logdata;<br>$referers = @savedreferer;<br>$lastpage = $location[-1];<br>$lastreferer = $referer[-1];<br>$lasthittime = $time[-1];<br> $lasthittime = $lasthittime + ($timedifferencevalue*3600) + ($timezone*3600);<br> $lasthittime = &dateformat("$lasthittime");<br>$lastbrowser = $browser[-1];<br>$lastbrowser =~ s/compatible;//isg;<br>$lastbrowser =~ s/Mozilla\/4.0//isg;<br>$lastbrowser =~ s/\(//isg;<br>$lastbrowser =~ s/\)//isg;<p>$statsout .= qq~<br><tr height=15><td colspan=2 valign=middle align=center bgcolor=$menubackground nowrap><font face="$font" color=$catfontcolor size=2><b>Общее</b></font></td><tr><br><tr><td bgcolor=$forumcolortwo><font face="$font" color=$forumfontcolor size=2>Всего посещений:</font></td><br><td bgcolor=$forumcolortwo><font face="$font" color=$forumfontcolor size=2>$impressions с $firstpost</font></td></tr><br><tr><td bgcolor=$forumcolortwo><font face="$font" color=$forumfontcolor size=2>Всего уникальных посетителей:</font></td><br><td bgcolor=$forumcolortwo><font face="$font" color=$forumfontcolor size=2>$uniques с $firstpost</font></td></tr><br><tr><td bgcolor=$forumcolortwo><font face="$font" color=$forumfontcolor size=2>Всего ссылающихся сайтов:</font></td><br><td bgcolor=$forumcolortwo><font face="$font" color=$forumfontcolor size=2>$referers с $firstpost</font></td></tr><br><tr height=15><td colspan=2 valign=middle align=center bgcolor=$menubackground nowrap><font face="$font" color=$catfontcolor size=2><b>Последний посетитель</b></font></td><tr><br><tr><td bgcolor=$forumcolortwo><font face="$font" color=$forumfontcolor size=2>Последний хит:</font></td><br><td bgcolor=$forumcolortwo><font face="$font" color=$forumfontcolor size=2>$lastpage</font></td></tr><br><tr><td bgcolor=$forumcolortwo><font face="$font" color=$forumfontcolor size=2>Последний ссылающийся сайт:</font></td><br><td bgcolor=$forumcolortwo><font face="$font" color=$forumfontcolor size=2>$lastreferer</font></td></tr><br><tr><td bgcolor=$forumcolortwo><font face="$font" color=$forumfontcolor size=2>Время последнего хита:</font></td><br><td bgcolor=$forumcolortwo><font face="$font" color=$forumfontcolor size=2>$lasthittime</font></td></tr><br><tr><td bgcolor=$forumcolortwo><font face="$font" color=$forumfontcolor size=2>Последний браузер:</font></td><br><td bgcolor=$forumcolortwo><font face="$font" color=$forumfontcolor size=2>$lastbrowser</font></td></tr>~;<br>return $statsout;<br>}<p><br>##############################################<br>######## Subroutes (Time Stats)<p>sub timestats {<br>$stattype = "по часам";<br>$statsout .= qq~<br><tr height=15><td valign=middle align=center bgcolor="$menubackground" nowrap><font face="$font" color=$catfontcolor size=2><b>Время</b></font></td><br><td valign=middle align=center bgcolor="$menubackground" nowrap><font face="$font" color=$catfontcolor size=2><b>Количество</b></font></td><br><td valign=middle align=center bgcolor="$menubackground" nowrap><font face="$font" color=$catfontcolor size=2><b>В процентах</b></font></td></tr>~;<p>foreach $time (@time) {<br> $time = $time + ($timedifferencevalue*3600) + ($timezone*3600);<br> $time = &dateformat("$time");<br>for ($i = 0; $i <= 12; $i++) {<br>if ($time =~ /$i:\d\d\sam/) {<br> $outvar = "{$i}hour";<br> ${$outvar}++;<br>} elsif ($time =~ /$i:\d\d\spm/) {<br> $td = $i;<br> $td += 12;<br> $outvar = "{$td}hour";<br> ${$outvar}++;<br>}<br>} <br>}<br>for ($i = 0; $i <= 24; $i++) {<br>$outvar = "{$i}hour";<br>if (! ${$outvar}) {<br> ${$outvar} = 0;<br> }<p>$percent = (${$outvar} / $#time) * 100;<br>$percent = sprintf("%01d",$percent);<br>$picper = $percent * 6;<br>$statsout .= qq~<br><tr><td bgcolor=$forumcolortwo><font face="$font" color=$forumfontcolor size=1>$i:00 - $i:59</font></td><br><td bgcolor=$forumcolortwo align=center><font face="$font" color=$forumfontcolor size=2>${$outvar}</font></td><br><td bgcolor=$forumcolortwo><font face="$font" color=$forumfontcolor size=1><img src=$imagesurl/images/bg.gif width=$picper height=5> ($percent%)</font></td></tr><br>~;<br>}<br>}<p><br>##############################################<br>######## Subroutes (Admin's Options)<p>sub admin {<br>$stattype = "опции администрирования";<br>my $inmembername = $q->param('membername');<br>my $inpassword = $q->param('password');<p>if (! $inmembername) { $inmembername = cookie("amembernamecookie"); }<br>if (! $inpassword) { $inpassword = cookie("apasswordcookie"); }<br>if ($inmembername eq "" || $inmembername eq "Guest") {<br> $inmembername = "Гость";<br> }<p>&getmember($inmembername);<p>if ($userregistered eq "no") { &borkage; exit; }<br>elsif ($inpassword ne $password) { &borkage; exit; }<br>elsif ($membercode ne "ad") { &borkage; exit; }<p>$statsout .= qq~<br><tr height=15><td valign=middle align=center bgcolor=$menubackground nowrap><font face="$font" color=$catfontcolor size=2><b>Опции Администрирования</b></font></td></tr><br><form action=$boardurl/stats.cgi method=post><tr><td bgcolor=$forumcolortwo><font face="$font" color=$forumfontcolor size=2><br><input type=hidden name=action value=setadmin><br><input type=radio name=adaction value=clearlog> Очистить журнал статистики<br><br><br><input type=radio name=adaction value=trimlog> Урезать журнал статистики до x строк <input type=text name=trimlen size=6><br><br><br><input type=submit name=submit value="Выполнить"></font></td></tr></form><br>~;<br>}<p>sub setadmin {<br>my $inmembername = $q->param('membername');<br>my $inpassword = $q->param('password');<p>if (! $inmembername) { $inmembername = cookie("amembernamecookie"); }<br>if (! $inpassword) { $inpassword = cookie("apasswordcookie"); }<br>if ($inmembername eq "" || $inmembername eq "Guest") {<br> $inmembername = "Гость";<br> }<p>&getmember($inmembername);<br>if ($userregistered eq "no") { &borkage; exit; }<br>elsif ($inpassword ne $password) { &borkage; exit; }<br>elsif ($membercode ne "ad") { &borkage; exit; }<p>$adaction = $q->param('adaction');<br>if ($adaction eq "clearlog") {<br>open(LOGFILE, ">$ikondir/data/stats.log");<br>print LOGFILE "";<br>close(LOGFILE);<br>} elsif ($adaction eq "trimlog") {<br>open(LOGFILE, "$ikondir/data/stats.log");<br>@logdata = <LOGFILE>;<br>close(LOGFILE);<p>open(LOGFILE, ">$ikondir/data/stats.log");<br>$trimlen = $q->param('trimlen');<br>$end = $#logdata - $trimlen;<br>for($i = $#logdata; $i >= $end; $i--) {<br>print LOGFILE "$logdata[$i]";<br>}<br>close(LOGFILE);<br>}<br>&admin;<br>}<p><br>##############################################<br>######## Subroutes (Borkage)<p>sub borkage {<br>$stattype = "ошибка";<br>$output = qq~<br><table width=$tablewidth align=center cellspacing=0 cellpadding=1 border=0 bgcolor=$titleborder><br><tr><td><table width=100% cellspacing=0 cellpadding=4 border=0><tr><td bgcolor=$menubackground valign=middle><br><font face=$font color=$menufontcolor size=1><br><center><b>Статистика:</b> <a href=$boardurl/stats.cgi>Общая</a> | <a href=$boardurl/stats.cgi?action=page>По страницам</a> | <a href=$boardurl/stats.cgi?action=member>По участникам</a> | <a href=$boardurl/stats.cgi?action=referer>По ссылкам</a> | <a href=$boardurl/stats.cgi?action=browos>По браузерам/ОС</a> | <a href=$boardurl/stats.cgi?action=time>По времени</a> | <a href=$boardurl/stats.cgi?action=admin>Администрирование</a></center></font></td></tr></table></td></tr></table><br><br><table cellpadding=0 cellspacing=0 border=0 width=$tablewidth align=center><br><tr><td width=30% rowspan=2><img src="$imagesurl/images/$boardlogo" border=0></td><td align=left valign=top><font face="$font" color=$fontcolormisc size=2><br><font face="$font" color=$fontcolormisc size=2><br> <img src="$imagesurl/images/closedfold.gif" border=0><a href="$forumsummaryprog"> $boardname</a><br><br> <img src="$imagesurl/images/bar.gif" border=0><img src="$imagesurl/images/openfold.gif" border=0> Stats: $stattype</td></tr></tr></table><br><br><table width=100% cellpadding=4 cellspacing=1 border=0><tr height=15><br><td valign=middle align=center bgcolor=$menubackground nowrap><font face="$font" color=$catfontcolor size=2><b>Ошибка!</b></font></td></tr><br><tr><td bgcolor=$forumcolortwo><font face="$font" color=$forumfontcolor size=1>Возможная причина: Вы не являетесь Администратором, или пароль введен неверно.</font></td></tr><br>~;<p>print $q->header();<br>$boardname = "$boardname > Развернутая статистика > $stattype";<br>&output(<br>-Title => $boardname, <br>-ToPrint => $output, <br>-Version => $versionnumber <br>);<br>}<p><br>##############################################<br>######## Subroutes (Summary)<br>sub sum {<br>my ($aref) = @_;<br>my ($total) = 0;<br>foreach (@$aref) { $total += $_ }<br>return $total;<br>}<br> Сохраняем и заливаем на сервер с правами доступа chmod 755. Шаг второй: В скрипте [B]ikon.lib[/B] заменяем код:
<br>$guests = 0;<br>$members = 0;<br>$currenttime = time;<br>$membergone = 15;<br>$userexpire = $currenttime - ($membergone * 60);<br> <br>$ipaddress = $ENV{'REMOTE_ADDR'};<p>if ($tempusername eq "Guest") { $tempusername = "Guest $ipaddress"; }<p> на код:
<br>$guests = 0;<br>$members = 0;<br>$currenttime = time;<br>$membergone = 15;<br>$userexpire = $currenttime - ($membergone * 60);<br> <br>$ipaddress = $ENV{'REMOTE_ADDR'};<br>$logname = $tempusername;<br>if ($tempusername eq "Guest") { $tempusername = "Guest $ipaddress"; }<p> Затем код:
<br> if ($memberprinted eq "no") { print FILE "$tempusername|$currenttime|$where\n";} <br> close(FILE);<br> <br> if ($method eq "both") {<br> на:
<br> if ($memberprinted eq "no") { print FILE "$tempusername|$currenttime|$where\n";} <br> close(FILE);<p>$referer = $ENV{'HTTP_REFERER'};<br>$browser = $ENV{'HTTP_USER_AGENT'};<br>$media = $ENV{'HTTP_ACCEPT'};<p>open(LOGFILE, ">>$ikondir/data/stats.log");<br>print LOGFILE "$logname|$currenttime|$where|$referer|$ipaddress|$browser\n";<br>close(LOGFILE);<p> if ($method eq "both") {<br> Сохраняем и заливаем на сервер... Шаг третий: в директории data создаем пустой файл [B]stats.log[/B] c правами доступа chmod 777. Шаг четвертый: рисуем картинку [B]bg.gif[/B] по своему усмотрению - это будут колонки графиков в статистике... Заливаем его в папку с картинками (images)... вот и все! запускайте stats.cgi и радуйтесь ;) Enjoy! зы: как работает можно глянуть у меня http://planeta.solo.by/cgi-bin/ikonboard/stats.cgi
| | | |
Gram
Модератор раздела
 Откуда: здешний Всего сообщений: 566 Рейтинг пользователя: 14 Репутация пользователя: 1Дата регистрации на форуме: 23 июля 2003
|
Профиль | Сообщить модератору | ИгнорироватьNEW! Сообщение отправлено: 18 ноября 2003 10:37
Модно  Только вот бы в ссылающихся сайтах не учитывать сам сайт (форум). Да и всем это видеть необязательно (т.е. хотелось бы недоступность статистики хотя бы для гостей)...
| | | |
JESUS
Новичок
 Откуда: Минск Всего сообщений: 249 Рейтинг пользователя: 0 Дата регистрации на форуме: 10 сен. 2003
|
Профиль | Сообщить модератору | ИгнорироватьNEW! Сообщение отправлено: 18 ноября 2003 10:53
[B]Gram [/B] 1. может, подскажешь, как сделать, чтобы была проверка, что адрес не начинается с $boardurl? сам я туповат для этого  2. ну поставь там гетмембер на какие-нить процедуры.. и доступ к ним ток для админа  (Сообщение отредактировал JESUS 18 нояб. 2003 13:54)
| | | |
JESUS
Новичок
 Откуда: Минск Всего сообщений: 249 Рейтинг пользователя: 0 Дата регистрации на форуме: 10 сен. 2003
|
Профиль | Сообщить модератору | ИгнорироватьNEW! Сообщение отправлено: 18 ноября 2003 11:38
...и еще если кому-нибудь надо.... Счетчик на главную форума... В [B]ikonboard.cgi[/B] найдите что-то типа:
<br> $cleanlastregistered = qq~<a href="$profileprog?action=show&member=$cleanlastregistered">$lastregisteredmember</a>~;<br> и ниже добавьте:
<br>##Counter Begin...<br> $filetoopen = "$ikondir" . "data/counter.dat";<br> open(FILE,"$filetoopen");<br> $count = <FILE>;<br> close(FILE);<br> $newcount = $count + 1;<br> $filetomake = "$ikondir" . "data/counter.dat";<br> open(FILE, ">$filetomake");<br> flock(FILE, 2);<br> print FILE "$newcount";<br> close(FILE);<br>##counter end...<br> и в любом месте, где считаете необходимым показывать статистику добавьте:
<br><center><font face="$font" color=$fontcolormisc size=2>$boardname (главная страница) были посещены <b>$newcount</b> раз.</center><br>
| | | |
Gram
Модератор раздела
 Откуда: здешний Всего сообщений: 566 Рейтинг пользователя: 14 Репутация пользователя: 1Дата регистрации на форуме: 23 июля 2003
|
Профиль | Сообщить модератору | ИгнорироватьNEW! Сообщение отправлено: 18 ноября 2003 11:48
JESUSА ты думаешь я в Перле шарю?  Вот в ikon.lib нашел какую-то поверку на refer и boardurl $_ = $ENV{'HTTP_REFERER'}; if (!m/^$boardurl/) { $referrer=$_; } Вообщем лучше у XXXX Pro спросить 
| | | |
Gram
Модератор раздела
 Откуда: здешний Всего сообщений: 566 Рейтинг пользователя: 14 Репутация пользователя: 1Дата регистрации на форуме: 23 июля 2003
|
Профиль | Сообщить модератору | ИгнорироватьNEW! Сообщение отправлено: 18 ноября 2003 11:55
JESUSО... Спасибо за счетчик  А то я уж хотел у тебя спросить как ты это сделал  )))
| | | |
JESUS
Новичок
 Откуда: Минск Всего сообщений: 249 Рейтинг пользователя: 0 Дата регистрации на форуме: 10 сен. 2003
|
Профиль | Сообщить модератору | ИгнорироватьNEW! Сообщение отправлено: 18 ноября 2003 13:07
[q] Вот в ikon.lib нашел какую-то поверку на refer и boardurl $_ = $ENV{'HTTP_REFERER'}; if (!m/^$boardurl/) { $referrer=$_; } Вообщем лучше у XXXX Pro спросить [/q]
подождем маэстро
| | | |
| 4X_Pro
Руководитель Проекта
Настоящий Компьютерщик
Откуда: Москва Всего сообщений: 2994 Рейтинг пользователя: 79
Дата регистрации на форуме: 29 сен. 2001
|
Профиль | Сообщить модератору | ИгнорироватьNEW! Сообщение отправлено: 20 ноября 2003 13:50
Во-первых, небольшой совет: если кто будет ставить этот хак, то отключайте в Расширенных настройках ведение логов (а то одно и то же будет делаться дважды). По поводу проверки: это она и есть, только вот лушче бы ее сделать так: <br>$_ = $ENV{'HTTP_REFERER'}; <br>if (!m/^$boardurl/i) { $referrer=$_; }<br>else { $referer = ""; }<br>
--- Каждый человек всегда может найти, чем он может быть полезен окружающим. Проблема только в одном: слишком многие не хотят это искать.
| | | |
JESUS
Новичок
 Откуда: Минск Всего сообщений: 249 Рейтинг пользователя: 0 Дата регистрации на форуме: 10 сен. 2003
|
Профиль | Сообщить модератору | ИгнорироватьNEW! Сообщение отправлено: 20 ноября 2003 13:52
[B]XXXX Pro [/B] в смысле заменить в икон.либ?
| | | |
JESUS
Новичок
 Откуда: Минск Всего сообщений: 249 Рейтинг пользователя: 0 Дата регистрации на форуме: 10 сен. 2003
|
Профиль | Сообщить модератору | ИгнорироватьNEW! Сообщение отправлено: 20 ноября 2003 13:59
[B]XXXX Pro [/B] еще вопрос.. чет статистика по часам там не пашет... везде нули показывает... вопрос - это баг или фича  (шутка) трудно ль исправить это где-то в sub timestats
| | | |
JESUS
Новичок
 Откуда: Минск Всего сообщений: 249 Рейтинг пользователя: 0 Дата регистрации на форуме: 10 сен. 2003
|
Профиль | Сообщить модератору | ИгнорироватьNEW! Сообщение отправлено: 20 ноября 2003 16:29
млин... оказывается по сайтам-реферерам все там учтено... просто я, по невнимательности, не заметил что в [B]sub refererstats [/B] код:
<br>unless ($referer =~ /scripting.q3f.net/isg) { просто нужно заменить на:
unless ($referer =~ /$boardurl/isg) { вроде все...
| | | |
JESUS
Новичок
 Откуда: Минск Всего сообщений: 249 Рейтинг пользователя: 0 Дата регистрации на форуме: 10 сен. 2003
|
Профиль | Сообщить модератору | ИгнорироватьNEW! Сообщение отправлено: 12 декабря 2003 13:13
[B]XXXX Pro [/B] Пожалуйста, глянь, когда выдастся свободная минутка, процедуру [B]sub timestats[/B]... В чем там ошибка? Почему графики нулю равны все? Сама процедура загружается - ошибок не выдает, а вот статистику по времени не считает... Глянуть можешь здесь... я специально убрал для этой процедуры проверку на мембера... Заранее спасибо!
| | | |
| 4X_Pro
Руководитель Проекта
Настоящий Компьютерщик
Откуда: Москва Всего сообщений: 2994 Рейтинг пользователя: 79
Дата регистрации на форуме: 29 сен. 2001
|
Профиль | Сообщить модератору | ИгнорироватьNEW! Сообщение отправлено: 12 декабря 2003 18:12
Во-первых, вот тут что-то подозрительное: <br> $#time<br> Никак не могу понять, зачем там #, по-моему, должно быть просто $time. Во-вторых, плохо то, что и массив @time и переменная $time имеют одинаковое название. Лучше бы что-то переименовать.
--- Каждый человек всегда может найти, чем он может быть полезен окружающим. Проблема только в одном: слишком многие не хотят это искать.
| | | |
JESUS
Новичок
 Откуда: Минск Всего сообщений: 249 Рейтинг пользователя: 0 Дата регистрации на форуме: 10 сен. 2003
|
Профиль | Сообщить модератору | ИгнорироватьNEW! Сообщение отправлено: 16 декабря 2003 14:13
[B]XXXX Pro [/B] 1. убрал я этот комментарий из $time ... не помогло... то же самое... 2. переименовывать во всем скрипте или только в процедуре (там вроде еще где-то встречается переменная $time)?
| | | |
| 4X_Pro
Руководитель Проекта
Настоящий Компьютерщик
Откуда: Москва Всего сообщений: 2994 Рейтинг пользователя: 79
Дата регистрации на форуме: 29 сен. 2001
|
Профиль | Сообщить модератору | ИгнорироватьNEW! Сообщение отправлено: 16 декабря 2003 20:39
Только в процедуре.
--- Каждый человек всегда может найти, чем он может быть полезен окружающим. Проблема только в одном: слишком многие не хотят это искать.
| | | |
Время выполнения скрипта: 0.0291. Количество выполненных запросов: 18, время выполнения запросов 0.0085
|