#!/usr/bin/perl # HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH # H # H Á¢¼ÓÅë°è Ä«¿îŸ CGI - "Super Counter" ver-99.08.25 ÃÖÁ¾¼öÁ¤ÀÏ 2000.01.14 # H »ç¿ëȯ°æ : perl ÀÎÅÍÇÁ¸®ÅͰ¡ ¼³Ä¡µÈ unix, linux, NT, windows ¼­¹ö # H Copyright (c) ¼ÛÀº¼ö # H http://cgitour.net # H master@cgitour.net # H ÀÌ ¼Ò½º´Â ÇÁ¸®¿þ¾îÀÔ´Ï´Ù. # H "¿øº»ÇüÅÂ" ·Î ´©±¸¿¡°Ô³ª Àç ¹èÆ÷ÇÒ¼ö ÀÖ½À´Ï´Ù. # H # H # H »õ·Î¿î ±â´ÉÀ» Ãß°¡Çϰųª ±âÁ¸ ±â´ÉÀ» °³¼±ÇÏ¿© ¼öÁ¤º»À» Àç ¹èÆ÷Çϴ°ÍÀº Çã¿ëµË´Ï´Ù. # H ±×·¯³ª ÀÌ °æ¿ì¿¡µµ ÇÁ·Î±×·¥¸í°ú ¿øÀÛÀÚÀÇ Copyright(c)´Â Àý´ë º¯°æ ÇÒ ¼ö¾øÀ¸¸ç, # H ¼öÁ¤ ´ç»çÀÚÀÇ 2Â÷Àû Copyright¸¦ ºÙÀ̴°͸¸ Çã¿ë µË´Ï´Ù. # H ´Ü¼øÈ÷ »ö»óÀ̳ª ¸ð¾ç¸¸À» º¯°æÇÑ ¼öÁ¤¹èÆ÷´Â Çã¿ëµÇÁö ¾Ê½À´Ï´Ù. # H ¹Ýµå½Ã »õ·Î¿î ±â´ÉÀÇ Ãß°¡³ª ±âÁ¸±â´ÉÀÇ °³¼±»çÇ×ÀÌ ÀÖ¾î¾ß¸¸ # H ¼öÁ¤º»À» ¹èÆ÷ÇÒ ¼ö ÀÖ½À´Ï´Ù. # H # H ÀÌ»ó, À§ÀÇ ³»¿ëÀº ¾î¶°ÇÑ °æ¿ì¿¡µµ Àý´ë ¼öÁ¤, »èÁ¦ ÇÒ ¼ö ¾ø½À´Ï´Ù. # H # HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH # ¿ì¼± À§ÀÇ Ã¹¶óÀÎ perlÀÇ °æ·Î¸¦ È®ÀÎ ÇÒ°Í # [Çʼö] # ´ÙÀ½ º¯¼ö¿¡´Â ¿µ¹® ¾ËÆÄºª 5ÀÚÀÌ»ó(¹«ÀÛÀ§·Î)À» ±³Ã¼ÇØ ³Ö¾îÁÙ°Í # ´Ù¸¥ »çÀÌÆ®¿¡ ¼³Ä¡µÈ Ä«¿îŸ¿Í ±¸ºÐÇØÁÖ±â À§ÇѰÍÀÓ. # µ¿ÀÏÇÑ »çÀÌÆ®³»¿¡ 2°³ ÀÌ»ó ¼³Ä¡ÇÒ °æ¿ì¿¡µµ ÀÌ Ç׸ñÀ» ¼­·Î ´Ù¸£°Ô ÁöÁ¤ÇÒ°Í. $MyCounterName = 'xpbgq'; # [¿É¼Ç] # [Ä«¿îŸÅë°è ÀÚµ¿ »ý¼º±â´É 'on/off'] # ´ÙÀ½ º¯¼ö¿¡ 'on' À» ´ëÀÔµÇÇÏ¸é ¸µÅ©ÅÂ±× »ðÀÔ¿¡ ÀÇÇÑ Åë°èŸÀÌÆ²ÀÇ ÀÚµ¿»ý¼º±â´ÉÀÌ ÀÛµ¿Çϰí # 'off'¸¦ ´ëÀÔÇϸé ÀÌ ÀÚµ¿»ý¼º±â´ÉÀ» Æó¼â½ÃŰ°Ô µÈ´Ù. # ÇÊ¿äÇѸ¸Å­ÀÇ Åë°èÄ«¿îŸ¸¦ ÁöÁ¤ÇÑÈÄ 'off' ½ÃÄѳõ´Â °ÍÀÌ ÁÁ´Ù. $Autolink = 'on'; # [¿É¼Ç] # [supercounter µð·ºÅ丮ÀÇ Àý´ë°æ·Î] # ÇöÀç('.')´Â ±âº» ¹èÄ¡»óÅÂ(»ó´ëÆÐ½º)·Î µÇ¾î ÀÖ´Â °ÍÀ̹ǷΠÀÌ´ë·Î »ç¿ëÇØµµ Á¤»óÀÛµ¿ µÈ´Ù. # Àüü°æ·Î¸¦ ¸ðµÎ »ç¿ëÇØ¾ßÇÏ´Â °æ¿ì¿¡¸¸ º¯°æÇØÁÙ°Í # (¿¹, " /user/home/cgitour/public_html/cgi-bin/supercounter ") $thisdirpath = '.'; # [¿É¼Ç] # µ¥ÀÌŸ ÀúÀå ÆÄÀϸí(º¯°æ°¡´É) # º¯°æ½Ã supercount.cgi ÆÄÀϳ»ÀÇ ¼öÁ¤Ç׸ñ°ú µ¿ÀÏÇØ¾ßÇÔ $Data1 = 'count1.txt'; $Data2 = 'count2.txt'; $Data3 = 'backup.txt'; $Data4 = 'ip.txt'; ### ÀÌÇÏ ¼öÁ¤Ç׸ñ ¾ø½¿ &Get_data; &readcountfile; &Returnone if($readcount[22] == 1); &Newitem unless( -e "$thisdirpath/data/$Pagename"); &get_cookie if($readcount[23] !~ /1/); if($readcount[24] !~ /1/){&IPcompar; $ipwrite = 1;} &visit_count; sub Get_data{ $GetString = $ENV{'QUERY_STRING'}; $GetString =~ tr/+/ /; $GetString =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; @GetPage = split(/==/,$GetString); $Pagename = $GetPage[0]; $Pageurl = $GetPage[1]; $Pagename =~ s/\s//g; $Pagename =~ s/\>//g; $Pagename =~ s/\//g; $Pageurl =~ s/\; close(READCOUNT); } sub IPcompar{ $ipcheck = $ENV{'REMOTE_ADDR'}; $ipcheck =~ s/\.//g; open(IPREAD,"$ipfile"); $ipstring=; close(IPREAD); if($ipstring =~ /$ipcheck/){&Returnone;} else{$ipstring .= $ipcheck;} } sub Newitem{ if($Autolink eq 'on'){ mkdir("$thisdirpath/data/$Pagename",0777); open(mkfile , ">$countfile1"); open(mkfile , ">$countfile2"); open(mkfile , ">$backup"); open(mkfile , ">$ipfile"); close(mkfile); chmod(0777,"$thisdirpath/data/$Pagename"); chmod(0777,"$countfile1"); chmod(0777,"$countfile2"); chmod(0777,"$backup"); chmod(0777,"$ipfile"); }else{&Returnone;} } sub visit_count{ &get_time; $readcount[19] =~ s/\s+//g; if(($readcount[19] != $hour) && (($hour % 3) == 0)){ $readcount[19] = "$hour\n"; open(READCOUNT,">$countfile2"); print READCOUNT @readcount ; close(READCOUNT); } chop(@readcount); $total=$readcount[0]; $today=$readcount[1]; $redate=$readcount[2]; $Ostm = $ENV{'HTTP_USER_AGENT'}; $total += 1; if($redate eq $writedate){ $today += 1; }else{ $today=1; $ipstring = ''; } $readcount[0] = $total; $readcount[1] = $today; @month_check=split(/\//, "$readcount[2]"); if($month_check[1] != $month){$readcount[$month+2]="";} $readcount[2]=$writedate; @count_day=split(/\|/, "$readcount[$month+2]"); $count_day[0]+=1; @count_hour=split(/\:/, "$count_day[$mday]"); $count_hour[0]+=1; $count_hour[$hour+1]+=1; $count_day[$mday]=join(':' , @count_hour); $readcount[$month+2]=join('|' ,@count_day); @week=split(/\|/,$readcount[15]); $week[$wday] += 1; $readcount[15]=join('|',@week); @OSM=split(/\|/,$readcount[16]); if($Ostm =~ /95/){$OSM[0] += 1;} elsif($Ostm =~ /98/){$OSM[1] += 1;} elsif($Ostm =~ /NT/){$OSM[2] += 1;} elsif($Ostm =~ /Macintosh/i){$OSM[3] += 1;} elsif(($Ostm =~ /Linux/i) || ($Ostm =~ /UNIX/i)){$OSM[4] += 1;} elsif($Ostm =~ /SunOS/i){$OSM[5] += 1;} else{$OSM[6] += 1;} $readcount[16]=join('|',@OSM); @BRW=split(/\|/,$readcount[17]); if($Ostm =~ /MSIE 4/){$BRW[0] += 1;} elsif($Ostm =~ /MSIE 5/){$BRW[1] += 1;} elsif($Ostm =~ /Mozilla/i){$BRW[2] += 1;} else{$BRW[3] += 1;} $readcount[17]=join('|',@BRW); $readcount[19]=$hour; $readcount[20] = $Pageurl if($Pageurl); $readcount[21] = $writedate if(!$readcount[21]); for(0..25){ $readcount[$_] =~ s/^\s+//g; $readcount[$_] =~ s/\s+$//g; $readcount[$_] .= "\n"; } open(READCOUNT,">$countfile1"); print READCOUNT @readcount; close(READCOUNT); if($ipwrite){ open(IPREAD, ">$ipfile"); print IPREAD "$ipstring"; close(IPREAD); } &Returnone; } sub Returnone{ &open_lock; $readcount[25] =~ s/\s+//g; $printimg = (!$readcount[25] || ($readcount[25] eq 'blank')) ? "blank.gif" : "$readcount[25]" ; print "Content-type: image/gif\n\n"; open(BLK, "$thisdirpath/banner/$printimg"); binmode(BLK); binmode(STDOUT); binmode(STDERR); print ; close (BLK); exit; } sub close_lock{ $Nowtime = time+15; while (-e "$LockFile" && time < $Nowtime) { sleep(1); } open(LOCK, ">$LockFile"); print LOCK "1"; close(LOCK); } sub open_lock{ unlink("$LockFile"); } sub get_time{ ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time); $year += 1900; $month=($mon+1); $writedate="$year/$month/$mday"; } sub get_cookie{ if($ENV{'HTTP_COOKIE'}) { @cookies = split(/; /,$ENV{'HTTP_COOKIE'}); foreach(@cookies) { ($name,$value) = split(/=/,$_); $COOKIE{$name} = $value; } if($COOKIE{$MyCounterName} eq $Pagename){&Returnone;}; } print "Set-Cookie: $MyCounterName=$Pagename\n"; } 1;