#!/usr/bin/perl # ^ change above line to point to PERL ############################################################### # Lürk Scripts [presents] Counter Active (w/ Users Online) # # # # - Installing: run "installation.html" in a browser.. # # # # Running this scripts without the copyright is illegal and # # any such spotted users will be punished. Security has also # # been installed to make script not work without copyright. # # # # Visit http://2design .cjb.net for updates and bug fixes. # ############################################################### use CGI::Carp qw(fatalsToBrowser); use Fcntl qw(:DEFAULT :flock); require "script/config.cgi"; require "data/admin.txt"; require "script/subs.cgi"; ############################### # DON'T EDIT BELOW THIS POINT # ############################### &parselink; $hide = $link{hide}; $display = $link{display}; $tag = $link{tag}; $skip = $link{skip}; ##Get date and user info &date; $count = "0"; $ctime = time; $ip2 = $ENV{REMOTE_ADDR}; $url = $ENV{HTTP_REFERER}; $url = "Unknown" if(!$url); $alang = $ENV{HTTP_ACCEPT_LANGUAGE}; @lang = split(/,/, $alang); ##Get logged ip from cookie &cookie; $ip = $cookie{$usercookie}; ##Set ip to cookie if none yet if(!$ip){ print "Set-Cookie: $usercookie=$ip2;\n"; $ip = $ip2; } ##Do ip log script now due to skip procedure sysopen(IPS, "$logs/ip-users.txt",O_RDWR) || die "$logs/ip-users.txt\n\n$!, stopped"; flock(IPS,2); @ips = ; close(IPS); foreach $each (@ips){ chop($each); @user = split(/\|/, $each); if($user[0] eq $ip){ $ipmatch = 1; $user[1] = $url; $user[2] = time; } $ignore = time - $user[2]; $count++, $reiplog .= "$user[0]|$user[1]|$user[2]\n" if($ignore <= $time); } $count++, $reiplog .= "$ip|$url|$ctime\n" if(!$ipmatch); $count = $count + $online; sysopen(NEW,"$logs/ip-users.txt",O_WRONLY|O_TRUNC) || die "$logs/ip-users.txt\n$!, stopped"; flock(NEW,2); print NEW $reiplog; close(NEW); ##Open total count sysopen(TOTAL, "$logs/total.txt",O_RDWR) || die "$logs/total.txt\n$!, stopped"; flock(TOTAL,2); ($unique, $total, $unique2, $total2, $lastdate) = split(/\|/, ); close(TOTAL); ##Decide if to skip counting if($skip ne "yes"){ if($date ne $lastdate){ if($lastdate ne "0"){ sysopen(NEW, "$logs/ip-count.txt",O_WRONLY|O_TRUNC) || die "$logs/ip-count.txt\n$!, stopped"; close(NEW); $retotal = "$lastdate|$unique|$total\n" if($lastdate && $unique && $total); sysopen(TOTAL, "$logs/daily.txt",O_RDWR) || die "$logs/daily.txt\n$!, stopped"; flock(TOTAL,2); @total = ; close(TOTAL); foreach $eachday (@total){ $retotal .= $eachday } sysopen(NEW, "$logs/daily.txt",O_WRONLY|O_TRUNC) || die "$logs/daily.txt\n$!, stopped"; flock(NEW,2); print NEW $retotal; close(NEW); } $unique = "0"; $total = "0"; $lastdate = $date; } ##Check counter ip log for users ip sysopen(IPS, "$logs/ip-count.txt",O_RDWR) || die "$logs/ip-count.txt\n\n$!, stopped"; flock(IPS,2); @ips = ; close(IPS); foreach $each (@ips){ chop($each); $matchip = 1 if($ip eq $each); } if($matchip){ $total = $total + $add; $total2 = $total2 + $add; }else{ $unique = $unique + $add; $unique2 = $unique2 + $add; $total = $total + $add; $total2 = $total2 + $add; ##Add ip to counter ip log sysopen(END, "$logs/ip-count.txt",O_WRONLY|O_APPEND) || die "$logs/ip-count.txt\n\n$!, stopped"; flock(END,2); print END "$ip\n"; close(END); sysopen(LANG,"$logs/lang.txt",O_RDWR) || die "$logs/lang.txt\n$!, stopped"; flock(LANG,2); @langs = ; close(LANG); foreach $language (@langs){ @lang2 = split(/\|/, $language); $lang2[0] = $lang2[0] + $add, $langmatch = 1 if($lang2[1] eq $lang[0]); $relang .= "$lang2[0]|$lang2[1]|\n"; } ##Add new non-listed language $relang .= "$add|$lang[0]|\n" if(!$langmatch); ##Save users language in log sysopen(NEW,"$logs/lang.txt",O_WRONLY|O_TRUNC) || die "$logs/lang.txt\n$!, stopped"; flock(NEW,2); print NEW $relang; close(NEW); } ##Save new total log sysopen(NEW, "$logs/total.txt",O_WRONLY|O_TRUNC) || die "$logs/total.txt\n$!, stopped"; flock(NEW,2); print NEW "$unique|$total|$unique2|$total2|$lastdate"; close(NEW); ##If none yet, set since date if(!$since){ sysopen(NEW, "$data/admin.txt", O_WRONLY|O_TRUNC) || die "$data/admin.txt\n$!, stopped"; flock(NEW,2); print NEW <; close(PAGE); foreach $onesite (@active){ chop($onesite); @sitedata = split(/\|/, $onesite); $sitedata[0] = $sitedata[0] + $add, $activematch = 1 if($sitedata[1] eq $url); $reactive .= "$sitedata[0]|$sitedata[1]|\n"; } ##Add new link activity link $reactive .= "$add|$url|\n" if(!$activematch); ##Save active links to log sysopen(NEW, "$logs/link.txt",O_WRONLY|O_TRUNC) || die "$logs/link.txt\n$!, stopped"; flock(NEW,2); print NEW $reactive; close(NEW); } ##Display requested method $write = "$count" if($display eq "usersonline"); $write = "$total" if($display eq "totaltoday"); $write = "$unique" if($display eq "uniquetoday"); $write = "$unique2" if($display eq "unique"); $write = "$total2" if($display eq "total" || !$display); ##Print data to page print "Content-type: text/html\n\n"; if($hide ne "yes"){ if($tag eq "javascript"){ print "document.write(\"$write\")\n"; }else{ print $write; } } exit;