#!/usr/local/bin/perl # absolute data path $data_dir = "/user/yoonforh/public_html/bin/counter/data/"; # default count data filename $count_file = "count.txt"; @referers = ("moon.daewoo.co.kr","www.daewoo.net","165.133.1.5"); &parse_query; &check_referer; &get_num; sub parse_query { # Get the input ($name, $value) = split(/=/, $ENV{'QUERY_STRING'}); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $FORM{$name} = $value; } sub check_referer { if (@referers && $ENV{'HTTP_REFERER'}) { foreach $referer (@referers) { if ($ENV{'HTTP_REFERER'} =~ /$referer/) { $ref = 1; last; } } } else { $ref = 1; } if ($ref != 1) { print "-1\n\n"; exit; } } # use Fcntl ':flock'; # import LOCK_* constants # adding flock 1998/10/28 - yoonforh sub LOCK_EX { 2 } sub LOCK_UN { 8 } sub get_num { if ($FORM{'data'} eq '') { $count_file="count.txt"; } else { $count_file=$FORM{'data'}; } use Fcntl; sysopen(FH, "$data_dir/$count_file", O_RDWR|O_CREAT, 0644) or die "can't open numfile: $!"; flock(FH, 2) or die "can't flock numfile: $!"; $count =|| 0; seek(FH, 0, 0) or die "can't rewind numfile: $!"; truncate(FH, 0) or die "can't truncate numfile: $!"; (print FH $count+1, "\n") or die "can't write numfile: $!"; # DO NOT UNLOCK THIS UNTIL YOU CLOSE close FH or die "can't close numfile: $!"; print "Content-type: text/plain\n\n"; print "$count"; }