#!/usr/local/bin/perl #Aggemam Text Counter(tm) by Simon Skals # #This is version 1.2 patchlevel 3 # #Feel free to modify this script, call it your own, or whatever. #You can mail me at aggemam@gid.dk and be subsequently ignored. # #The most recent version of this script can always be found at this URL: #Aggemam homepage http://www.gid.dk/~simon/ # #DESCRIPTION: #Aggemam Text Counter is a simple text counter that requires SSI. For good #measure, it logs the IP address of the last visitor and the counter will not #increment until it is fetched by a new IP. # #INSTALLATION: #Installation should be easy. Just copy the script into your cgi-bin and #chmod it to 755. Touch the files counter.dat and hostname.dat in whatever #location you've chosen for them. Remember to make them readable and writable #for the world. # #Finally, just stick this piece of SSI in your HTML: # # #Please note that this script will suck if your system doesn't support flock. # #CONFIGURATION: #Set this variable to the directory where you want to store the data files. #Be careful not to add a final trailing slash. $datadir="/usr/home/yourlogin/somedir"; #Ok, let's get to work. #Prepare for HTML output. print "Content-type: text/html\n\n"; #Get the REMOTE_HOST variable to find out who's hitting the page. $host = $ENV{'REMOTE_HOST'}; #Open the file counter.dat to find out the current value of the counter. open (counter, "<$datadir/counter.dat") || &error("Ouch, could not open $datadir/counter.dat."); flock counter, 2; $counter = ; close (counter); #Next we've got to open the file hostname.dat to see the latest hostname to #hit the page. open (hostname, "<$datadir/hostname.dat") || &error("Ouch, could not open $datadir/hostname.dat."); flock hostname, 2; $oldhost = ; close (hostname); #Check whether these two hostnames are identical. if ($host eq $oldhost) { #If they're identical, we don't want the counter to increase. Instead we just #print the current value that we got from counter.dat. print "$counter"; exit; } else { #If they're not identical, we want to increase the counter with 1 and save this #value to counter.dat. Then we save the new hostname to hostname.dat. Finally, #we print the new value of the counter. $counter++; open (newcounter, ">$datadir/counter.dat") || &error("Ouch, could not open $datadir/counter.dat."); flock newcounter, 2; print newcounter "$counter"; close (newcounter); open (newhostname, ">$datadir/hostname.dat") || &error("Ouch, could not open $datadir/hostname.dat."); flock newhostname, 2; print newhostname "$host"; close (newhostname); print "$counter"; exit; } #Here's the subroutine we use in case something went haywire. sub error { $descr = $_[0] ; print "[$descr $!.]"; exit; }