Perl
Hit Counter Example
This page provides an example
Perl hit counter program. To
implement this script program as
a server side include it is
necessary to place the program
in the /cgi-bin directory of the
server. This is relative to the
location of your root file that
begins your webpage.
WARNING:
If you copy this file or edit
it using an editor in a Windows
operating system and plan to run
it on a UNIX or Linux system, make
SURE there are no carriage returns
embedded in it!!! You will
NEED to
remove the carriage returns and
they WILL be there if you use an
editor on a Windows operating
system to save your file. If you
do not remove all carriage
returns, perl may run it correctly
from the command line, but it will not run
correctly from your webserver. If
you have this problem, you will
see the contents of your file
including comments on your browser
when you are testing it.
The Example Code
#!/usr/bin/perl
# hits.pl
#
# This program counts hits, to a web page.
# It does not count visitors.
# The file name used to count hits is generated using
# the environment variable DOCUMENT_NAME provided by SSI.
# This feature allows this script to be run from any page,
# but still keep counts for each page they are run from.
# The name of each file that you are tracking hits on must be different
# for this to work correctly.
# Of course you'll need a line like:
# <!--#exec cgi="/cgi-bin/hits.pl"-->
# to implement your SSI and your server must support SSI to
# implement the counter in this manner.
#
# Set the file name up.
$HcntFile = "../data/$ENV{'DOCUMENT_NAME'}$ENV{'QUERY_STRING'}hits.dat";
#
# Open and read the file.
# $HitCounts is set to 0 if the file doesn't exist.
open (COUNTHAND, "<$HcntFile");
$HitCounts = <COUNTHAND>;
# Close the file input and open it to truncate output
# Should we worry about locking the file in case another process
# uses it? Probably not since if we take that many hits
# missing a few won't matter and we're too busy to be concerned.
close (COUNTHAND);
open (COUNTHAND, ">$HcntFile");
# Increment $Counter, then write it back out. Put up a message
# with the new value. Close the file and exit.
$HitCounts += 1;
print COUNTHAND $HitCounts;
# flock (COUNTHAND, 8);
close (COUNTHAND);
print "Content-type: text/html", "\n\n"; # MIME header.
print "<HTML>", "\n";
print "<HEAD>";
print "<TITLE>General Hit Counter</TITLE>", "\n";
print "</HEAD>", "\n";
print "<BODY>", "\n";
print "<center><H3>Hits on this Page: $HitCounts.</H3></center>\n";
print "</BODY>", "\n";
print "</HTML>", "\n";
# End access.pl
Implementing in the HTML file
- Rename your HTML file so it
has a filename with a SHTML
extension. The file "myfile.html"
would become "myfile.shtml".
- Add the following line in
your file where you want the
output of server side script to
be located:
<!—#exec cgi="/cgi-bin/hits.pl"—>
|