#!/usr/local/bin/perl
####################################################################
# Countdown Version 2.1
# Copyright 1998 Edward Preble scripts@datatrendsoftware.com
# Created 11/30/98 Last Modified 10/30/99
# Datatrend Software http://www.datatrendsoftware.com/cgi.html
####################################################################
# This script will do the following:
# 1. Is activated by a link of the following form,
# http://www.yoursite.com/yourdir/countdown.cgi?yourfile.anything
# 2. Updates a text log file and an HTML file with the counts of the
# downloads made so far, ordered greatest to least.
# 3. Creates 2 HTML tables, one with all the download counts, and another
# with just the top ten downloads. These are great to let site visitors
# see the most popular downloads available on your site.
# 3. Will auto-forward the web surfer to "file.anything" for download.
# 4. The interface is seamless, there are no user prompts.
####################################################################
# COPYRIGHT NOTICE
# Copyright 1999 Edward Preble All Rights Reserved.
#
# This script is free. You may use and modify this script as you please.
# Do not remove this header, as it is the only thing that gives me credit
# for my work in writing this code. If you wish to sell this code, you
# must obtain permission from the authors first.
#
# Scripts provided by Datatrend Software are supplied "as-is". You agree
# to indemnify the author's from any liability that may arise from the use
# of this script.
#
# Obtain permission before redistributing this software over the Internet or
# in any other medium. In all cases copyright and header must remain intact
####################################################################
#
# You must modify the the location of PERL in the first line above to match
# the location on your server.
# You must also modify the following variables to match your preferences.#Location and name of the CountDown Script on your server
$CountDownLocation = 'http://www.yoursite.com/cgi-bin/countdown.cgi';
# This is the directory location of the file(s) that will
be downloaded
$DownloadFileDir = 'http://www.yoursite.com';
# This is the counter log filename
$Counter = '/docs/scripts/countdown/countdown.log';
#This is the HTML output filename
$HTMLFile = '/docs/scripts/countdown/countdownlog.htm';
#This is the HTML output filename for the Top Ten List only
$TopTenFile = '/docs/scripts/logs/countdowntopten.htm';
##########################################################
# No changes need to be made after these lines
##########################################################
$File = $ENV{'QUERY_STRING'};
# Strip off anything up to, and including, the last "/", if present
if ($File =~ /\//) { ($File) = $File =~ /^.*\/([^\/]+)$/g; }
$DownloadFile = "$DownloadFileDir/$File";
# Add hit to main counter
open (CNT,"+<$Counter") || &endIt;
flock (CNT,2);
seek (CNT,0,0);
@infile = <CNT>;
# This will put the hits in order from max to min for each
file added
$record = 0; # Starting record in the log is always 0
$correctspot = 'N'; # Tells script if this record is the one that was hit
# Proceeds as long as the record number is less than the
total
# number of records in the file and the correct record hasn't been found yet.
while (($correctspot eq 'N') && ($record <= $#infile))
{ ($count,$filename,$eol) = split(/\|/,$infile[$record]);
if ($filename eq $File) #if this is the right record, hit it, trip correctspot
{$count++;
$infile[$record] = join ("\|",$count,$filename,"\n");
$correctspot = 'Y';
}
$record++;
}
if ($correctspot eq 'N')
{ $count = 1;
$newrecord = join ("\|",$count,$File,"\n");
push @infile, $newrecord;
}
@outfile = sort {($b =~ /(\d+)/)[0] <=> ($a =~
/(\d+)/)[0]} @infile;
seek (CNT,0,0);
print (CNT @outfile);
truncate (CNT,tell(CNT));
close (CNT);
#Create HTML File - Whole List
open (Out,"+>$HTMLFile") || &endIt;
flock (Out,2);
print {Out} <<TextOut;
<html>
<head>
<title>CountDown Log File Contents</title>
</head>
<body>
<table border="0" cellspacing="4">
<tr>
<td><strong>Downloads - </strong></td>
<td><strong>File</strong></td>
</tr>
TextOut
foreach (@outfile) {
($count,$filename,$eol) = split(/\|/,$_);
print {Out} <<TextOut;
<tr>
<td align="right">$count - </td>
<td><a
href="$CountDownLocation?$filename">$filename</a></td>
</tr>
TextOut
}
print {Out} <<TextOut;
</table>
<hr noshade color="#0000FF">
<p><font face="Arial" size="1">Log created with <a
href="http://www.datatrendsoftware.com/cgi.html">CountDown</a> by <a
href="http://www.datatrendsoftware.com">Datatrend
Software</a>.</font></p></body>
</html>
TextOut
#Create HTML File - Top Ten List
open (Out,"+>$TopTenFile") || &endIt;
flock (Out,2);
print {Out} <<TextOut;
<html>
<head>
<title>CountDown Log File Top Ten List</title>
</head>
<body>
<table border="0" cellspacing="4">
<tr>
<td><strong>Downloads - </strong></td>
<td><strong>File</strong></td>
</tr>
TextOut
if ($#outfile < 9) {
for ($i = 0; $i <= $#outfile; $i++) {
($count,$filename,$eol) = split(/\|/,$outfile[$i]);
print {Out} <<TextOut;
<tr>
<td align="right">$count - </td>
<td><a
href="$CountDownLocation?$filename">$filename</a></td>
</tr>
TextOut
}
} else {
for ($i = 0; $i <=9; $i++) {
($count,$filename,$eol) = split(/\|/,$outfile[$i]);
print {Out} <<TextOut;
<tr>
<td align="right">$count - </td>
<td><a
href="$CountDownLocation?$filename">$filename</a></td>
</tr>
TextOut
}
}
print {Out} <<TextOut;
</table>
<hr noshade color="#0000FF">
<p><font face="Arial" size="1">Log created with <a
href="http://www.datatrendsoftware.com/cgi.html">CountDown</a> by <a
href="http://www.datatrendsoftware.com">Datatrend
Software</a>.</font></p>
</body>
</html>
TextOut
print "Content-type: text/html\n";
print "Location: $DownloadFile\n\n";
sub endIt # exit on error
{ exit;
} # end endIt |