⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stats.lib

📁 这个社区是虚拟社区使用的程序
💻 LIB
字号:
################################################################################ Stats.lib                                                                   ################################################################################# UltraBoard Ver. 1.61 by UltraScripts.com                                    ## Scripts written by Jacky W.W. Yung, WebMaster@UltraScripts.com              ## Available from http://www.UltraScripts.com/UltraBoard/                      ## --------------------------------------------------------------------------- ## PROGRAM NAME : UltraBoard                                                   ## VERSION : 1.61                                                              ## LAST MODIFIED : 30/06/1999                                                  ## =========================================================================== ## COPYRIGHT NOTICE :                                                          ##                                                                             ## Copyright (c) 1999 Jacky Yung. All Rights Reserved.                         ##                                                                             ## This program is free software; you can change or modify it as you see fit.  ## However, modified versions cannot be sold or distributed.  You cannot alter ## the copyright and "powered by" notices throughout the scripts. These        ## notices must be clearly visible to the end users.                           ##                                                                             ## WARRANTY DISCLAIMER:                                                        ##                                                                             ## THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT WITHOUT ## ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR       ## FITNESS FOR A PARTICULAR PURPOSE.                                           ################################################################################################################################################################ WriteStats                                                                  ################################################################################sub WriteStats {	my (@Months) = ("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Des");	my (@Days) = ("Sun","Mon","Tue","Wed","Thu","Fri","Sat");	my ($IP,$RemoteHost,$Agent,$Referer,$Time,%Hits,$Value);	$IP = $ENV{'REMOTE_ADDR'};				# Get IP address	$RemoteHost = $ENV{'REMOTE_HOST'};		# Get remote host address	$Referer = $ENV{'HTTP_REFERER'};		# Get referer address	if (!$Referer) {		$Referer="BookMark";	}	$Agent = $ENV{'HTTP_USER_AGENT'};		# Get user agent	$Referer =~ s/\?(.|\n)*//ig;	$Time=time;								# Get time	my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($Time);	my ($CurrentDate) = $mday." ".$Months[$mon].", ".$Days[$wday];	open(IPS,"$StatsPath/IPs.list");		flock(IPS,2) if ($FLock);		my (@IPs)=<IPS>;	close(IPS);	open(CDATE,"$StatsPath/CDate.dat");		flock(CDATE,2) if ($FLock);		my ($LastDate)=<CDATE>;	close(CDATE);	my ($NewDay) = "N";	$NewDay = "Y" if ($CurrentDate ne $LastDate);	if (("@IPs" !~ /$IP/ig)||($NewDay eq "Y")) {		open(HITS,"$StatsPath/Total.hits");			flock(HITS,2) if ($FLock);			my ($TotalHits)=<HITS>;		close(HITS);		open(HITS,">$StatsPath/Total.hits");			flock(HITS,2) if ($FLock);			print HITS ++$TotalHits;			flock(HITS,8) if ($FLock);		close(HITS);# Process Last Date					if ($NewDay eq "Y") {			open(CDATE,">$StatsPath/CDate.dat");				flock(CDATE,2) if ($FLock);				print CDATE $CurrentDate;				flock(CDATE,8) if ($FLock);			close(CDATE);		}# Process IPs			open(IPS,">>$StatsPath/IPs.list") if ($NewDay eq "N");		open(IPS,">$StatsPath/IPs.list") if ($NewDay eq "Y");			flock(IPS,2) if ($FLock);			print IPS $IP."\n";			flock(IPS,8) if ($FLock);		close(IPS);# Process Today Hits			open(HITS,"$StatsPath/Today.hits");			flock(HITS,2) if ($FLock);			my ($TodayHits)=<HITS>;		close(HITS);		if ($NewDay eq "Y") {			open(HITS,">$StatsPath/Today.hits");				flock(HITS,2) if ($FLock);				print HITS "1";				flock(HITS,8) if ($FLock);			close(HITS);			$TodayHits=0 if (!$TodayHits);			if ($LastDate) {				open(HITS,">>$StatsPath/Days.hits");					flock(HITS,2) if ($FLock);					print HITS $LastDate."|^|".$TodayHits."\n";					flock(HITS,8) if ($FLock);				close(HITS);			}		}else{			open(HITS,">$StatsPath/Today.hits");				flock(HITS,2) if ($FLock);				print HITS ++$TodayHits;				flock(HITS,8) if ($FLock);			close(HITS);		}# Process Referers		%Hits=();		open(REFERER,"$StatsPath/Referers.log");			my (@RefURLs)=<REFERER>;		close(REFERER);		chomp(@RefURLs);		my ($RefURL);		foreach $RefURL (@RefURLs) {			($RefURL,$Value)=split(/\|\^\|/,$RefURL);			 $Hits{$RefURL}=$Value;		}		$Hits{$Referer}++;		open(REFERER,">$StatsPath/Referers.log");			flock(REFERER,2) if ($FLock);			foreach $RefURL (keys %Hits) {				print REFERER $RefURL."|^|".$Hits{$RefURL}."\n";			}			flock(REFERER,8) if ($FLock);		close(REFERER);# Process Browsers		%Hits=();		$Max=0;		my ($Part,$BrowserVersion,$BrowserName);		my (@Browsers) = ("Lynx","MOSAIC","AOL","Opera","JAVA","MacWeb","WebExplorer","OmniWeb");		for (@Browsers) {			if ($Agent =~/$_/i) {				$BrowserName = $_;			}		}		if (($Agent =~ /Mozilla/isg)&&($Agent !~ /MSIE/isg)) {			$Part =(split(/\(/, $Agent))[0];			$BrowserVersion = (split(/\//, $Part))[1];			$BrowserVersion = (split(/ /,$BrowserVersion))[0];			$BrowserVersion =~ s/([\d\.]+)/$1/isg;			$BrowserName = "Netscape_$BrowserVersion";		}elsif (($Agent =~ /Mozilla/isg)&&($Agent =~ /Opera/isg)) {			$Part =(split(/\(/, $Agent))[0];			$BrowserVersion = (split(/\//, $Part))[1];			$BrowserVersion = (split(/ /,$BrowserVersion))[0];			$BrowserVersion =~ s/([\d\.]+)/$1/isg;			$BrowserName = "Opera_$BrowserVersion";		}elsif (($Agent =~ /Mozilla/isg)&&($Agent =~ /MSIE/isg)) {			$Part = (split(/\(/, $Agent))[1];			$Part = (split(/\;/,$Part))[1];			$BrowserVersion = (split(/ /,$Part))[2];            $BrowserVersion =~ s/([\d\.]+)/$1/isg;			$BrowserName = "MSIE_$BrowserVersion";		}elsif ($BrowserName eq "")	{			$BrowserName = "Other_$Agent";			$BrowserName=~s/ /_/isg;		}		open(HITS,"$StatsPath/Browsers.hits");			flock(HITS,2) if ($FLock);			@Browsers=<HITS>;		close(HITS);		chomp(@Browsers);		my ($Browser);		foreach $Browser (@Browsers) {			($Browser,$Value)=split(/\|\^\|/, $Browser);			$Hits{$Browser}=$Value;			$Max=$Value and $MaxBrowser=$Browser if ($Value>$Max);		}		$Hits{$BrowserName}++;		open(HITS,">$StatsPath/Browsers.hits");			flock(HITS,2) if ($FLock);			foreach $Browser (sort keys %Hits) {				$Hits{$Browser}=1 if (!$Hits{$Browser});				print HITS $Browser."|^|".$Hits{$Browser}."\n";			}			flock(HITS,8) if ($FLock);		close(HITS);		open(POP,">$StatsPath/Browsers.pop");			flock(POP,2) if ($FLock);			print POP $MaxBrowser."|^|".$Max;			flock(POP,8) if ($FLock);		close(POP);# Process Log		open(LOG,"$StatsPath/Visitors.log");			flock(LOG,2) if ($FLock);			my (@Visitors)=<LOG>;		close(LOG);		if (scalar(@Visitors) >= $MaxVisitorLog) {			open(LOG,">$StatsPath/Visitors.log");				flock(LOG,2) if ($FLock);				for ($i=scalar(@Visitors)-$MaxVisitorLog+1;$i<scalar(@Visitors);$i++) {					print LOG $Visitors[$i];				}				print LOG localtime($Time)."|^|".$IP."|^|".$RemoteHost."|^|".$Referer."|^|".$BrowserName."\n";				flock(LOG,8) if ($FLock);			close(LOG);		}else{			open(LOG,">>$StatsPath/Visitors.log");				flock(LOG,2) if ($FLock);				print LOG localtime($Time)."|^|".$IP."|^|".$RemoteHost."|^|".$Referer."|^|".$BrowserName."\n";				flock(LOG,8) if ($FLock);			close(LOG);		}# Process Day Hits		%Hits=();		$Max=0;		open(HITS,"$StatsPath/Day.hits");			flock(HITS,2) if ($FLock);			my (@Day)=<HITS>;		close(HITS);		chomp(@Day);		my ($Hour);		foreach $Hour (@Day) {			($Hour,$Value)=split(/\|\^\|/, $Hour);			$Hits{$Hour}=$Value;			$Max=$Value and $MaxHour=$Hour if ($Value>$Max);		}		$Hits{$hour}++;		open(HITS,">$StatsPath/Day.hits");			flock(HITS,2) if ($FLock);			for (0..23) {				$Hits{$_}=0 if (!$Hits{$_});				print HITS $_."|^|".$Hits{$_}."\n";			}			flock(HITS,8) if ($FLock);		close(HITS);		open(POP,">$StatsPath/Day.pop");			flock(POP,2) if ($FLock);			print POP $MaxHour."|^|".$Max;			flock(POP,8) if ($FLock);		close(POP);# Process Week Hits		%Hits=();		$Max=0;		open(HITS,"$StatsPath/Week.hits");			flock(HITS,2) if ($FLock);			my (@Week)=<HITS>;		close(HITS);		chomp(@Week);		my ($Day);		foreach $Day (@Week) {			($Day,$Value)=split(/\|\^\|/, $Day);			$Hits{$Day}=$Value;			$Max=$Value and $MaxDay=$Day if ($Value>$Max);		}		$Hits{$wday}++;		open(HITS,">$StatsPath/Week.hits");			flock(HITS,2) if ($FLock);			for (0..6) {				$Hits{$_}=0 if (!$Hits{$_});				print HITS $_."|^|".$Hits{$_}."\n";			}			flock(HITS,8) if ($FLock);		close(HITS);		open(POP,">$StatsPath/Week.pop");			flock(POP,2) if ($FLock);			print POP $MaxDay."|^|".$Max;			flock(POP,8) if ($FLock);		close(POP);	}}################################################################################ WriteLog                                                                    ################################################################################sub WriteLog {	my ($IP,$RemoteHost,$Agent,$Referer,$Time,%Hits,$Value);	$IP = $ENV{'REMOTE_ADDR'};				# Get IP address	$RemoteHost = $ENV{'REMOTE_HOST'};		# Get remote host address	$Referer = $ENV{'HTTP_REFERER'};		# Get referer address	if (!$Referer) {		$Referer="Unknown";	}	$Agent = $ENV{'HTTP_USER_AGENT'};		# Get user agent	$Referer =~ s/\?(.|\n)*//ig;	$Time=time;								# Get time# Process Action Log	open(LOG,"$StatsPath/Action.log");		flock(LOG,2) if ($FLock);		my (@Actions)=<LOG>;	close(LOG);	if (scalar(@Actions) >= $MaxActionLog) {		open(LOG,">$StatsPath/Action.log");			flock(LOG,2) if ($FLock);			for ($i=scalar(@Actions)-$MaxActionLog+1;$i<scalar(@Actions);$i++) {				print LOG $Actions[$i];			}			print LOG localtime($Time)."|^|".$IP."|^|".$RemoteHost."|^|".$Agent."|^|".$in{'Action'}."|^|".$in{'Category'}."|^|".$in{'Board'}."|^|".$in{'Post'}."|^|".$in{'ID'}."|^|".$UserName."\n";			flock(LOG,8) if ($FLock);		close(LOG);	}else{		open(LOG,">>$StatsPath/Action.log");			flock(LOG,2) if ($FLock);			print LOG localtime($Time)."|^|".$IP."|^|".$RemoteHost."|^|".$Agent."|^|".$in{'Action'}."|^|".$in{'Category'}."|^|".$in{'Board'}."|^|".$in{'Post'}."|^|".$in{'ID'}."|^|".$UserName."\n";			flock(LOG,8) if ($FLock);		close(LOG);	}# Process Action Hits#	%Hits=();#	open(HITS,"$StatsPath/Action.hits");#		flock(HITS,2) if ($FLock);#		my (@Actions)=<HITS>;#	close(HITS);#	chomp(@Actions);#	my ($Action);#	foreach $Action (@Actions) {#		($Action,$Value)=split(/\|\^\|/, $Action);#		$Hits{$Action}=$Value;#	}#	$Hits{$in{'Action'}.".".$in{'Category'}.".".$in{'Board'}.".".$in{'Post'}.".".$in{'ID'}}++;#	open(HITS,">$StatsPath/Action.hits");#		flock(HITS,2) if ($FLock);#		foreach $Action (keys %Hits) {#			$Hits{$Action}=1 if (!$Hits{$_});#			print HITS $Action."|^|".$Hits{$Action}."\n";#		}#		flock(HITS,8) if ($FLock);#	close(HITS);	}###############################################################################1;# End of Stats.lib file###############################################################################

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -