Current Path : /home/tools/awstats/wwwroot/cgi-bin/ |
FreeBSD hs32.drive.ne.jp 9.1-RELEASE FreeBSD 9.1-RELEASE #1: Wed Jan 14 12:18:08 JST 2015 root@hs32.drive.ne.jp:/sys/amd64/compile/hs32 amd64 |
Current File : //home/tools/awstats/wwwroot/cgi-bin/awredir.pl |
#!/usr/bin/perl #------------------------------------------------------- # Save the click done on managed hits into a trace file # and return to browser a redirector to tell browser to visit this URL. # Ex: <a href="http://athena/cgi-bin/awredir/awredir.pl?url=http://212.43.217.240/%7Eforumgp/forum/list.php3?f=11">XXX</a> #------------------------------------------------------- #use DBD::mysql; #------------------------------------------------------- # Defines #------------------------------------------------------- use vars qw/ $REVISION $VERSION /; $REVISION='$Revision: 1.3 $'; $REVISION =~ /\s(.*)\s/; $REVISION=$1; $VERSION="1.1 (build $REVISION)"; use vars qw / $DIR $PROG $Extension $DEBUG $DEBUGFILE $REPLOG $DEBUGRESET $SITE $REPCONF /; ($DIR=$0) =~ s/([^\/\\]*)$//; ($PROG=$1) =~ s/\.([^\.]*)$//; $Extension=$1; $DEBUG=0; # Debug level $DEBUGFILE="$PROG.log"; # Debug output (A log file name or "screen" to have debug on screen) $REPLOG="$DIR"; # Debug directory $TRACEBASE=0; # Set to 1 to track click on links that point to extern site into a database $TRACEFILE=0; # Set to 1 to track click on links that point to extern site into a file $TXTDIR="$DIR/../../../logs"; # Directory where to write tracking file (if TRACEFILE=1) $TXTFILE="awredir.trc"; # Tracking file (if TRACEFILE=1) $EXCLUDEIP="127.0.0.1"; #------------------------------------------------------- # Functions #------------------------------------------------------- sub error { print "Content-type: text/html; charset=iso-8859-1\n"; print "\n"; print "<html>\n"; print "<head>\n"; print "</head>\n"; print "\n"; print "<body>\n"; print "<center><br>\n"; print "<font size=2><b>AWRedir</b></font><br>\n\n"; print "<font color=#880000>$_[0].</font><br><br>\n"; print "Setup (setup or logfile permissions) may be wrong.\n"; $date=localtime(); print "<CENTER><br><font size=1>$date - <b>Advanced Web Redirector $VERSION</b><br>\n"; print "<br>\n"; print "</body>"; print "</html>"; die; } #------------------------------------------------------- # MAIN #------------------------------------------------------- if ($DEBUG) { open(LOGFILE,">$REPLOG/$PROG.log"); print LOGFILE "----- $PROG $VERSION -----\n"; } if (! $ENV{'GATEWAY_INTERFACE'}) { # Run from command line print "----- $PROG $VERSION (c) Laurent Destailleur -----\n"; print "This script is absolutely not required to use AWStats.\n"; print "It's a third tool that can help webmaster in their tracking tasks but is\n"; print "not used by AWStats engine.\n"; print "\n"; print "This tools must be used as a CGI script. When called as a CGI, it returns to\n"; print "browser a redirector to tell it to show the page provided in 'url' parameter.\n"; print "So, to use this script, you must replace HTML code for external links onto your\n"; print "HTML pages from\n"; print "<a href=\"http://externalsite/pagelinked\">Link</a>\n"; print "to\n"; print "<a href=\"http://mysite/cgi-bin/awredir.pl?url=http://externalsite/pagelinked\">Link</a>\n"; print "\n"; print "For your web visitor, there is no difference. However this allow you to track\n"; print "clicks done on links onto your web pages that point to external web sites,\n"; print "because an entry will be seen in your own server log to awredir.pl local script,\n"; print "with its parameter, even if link was pointing to another external web server.\n"; print "\n"; sleep 2; exit 0; } $Url=$ENV{QUERY_STRING}; # Extract url to redirect to if ($Url =~ /url=\"([^\"]+)\"/) { $Url=$1; } elsif ($Url =~ /url=(.+)$/) { $Url=$1; } if ($Url !~ /^http/i) { $Url = "http://".$Url; } if (! $Url) { error("Error: Bad use of $PROG. To redirect an URL with $PROG, use the following syntax:<br><i>/cgi-bin/$PROG.pl?url=http://urltogo</i>"); } if ($DEBUG) { print LOGFILE "Url=$Url\n"; } # Get date ($nowsec,$nowmin,$nowhour,$nowday,$nowmonth,$nowyear,$nowwday,$nowyday,$nowisdst) = localtime(time); if ($nowyear < 100) { $nowyear+=2000; } else { $nowyear+=1900; } $nowsmallyear=$nowyear;$nowsmallyear =~ s/^..//; if (++$nowmonth < 10) { $nowmonth = "0$nowmonth"; } if ($nowday < 10) { $nowday = "0$nowday"; } if ($nowhour < 10) { $nowhour = "0$nowhour"; } if ($nowmin < 10) { $nowmin = "0$nowmin"; } if ($nowsec < 10) { $nowsec = "0$nowsec"; } if ($TRACEBASE == 1) { if ($ENV{REMOTE_ADDR} !~ /$EXCLUDEIP/) { if ($DEBUG == 1) { print LOGFILE "Execution requete Update sur BASE=$BASE, USER=$USER, PASS=$PASS\n"; } my $dbh = DBI->connect("DBI:mysql:$BASE", $USER, $PASS) || die "Can't connect to DBI:mysql:$BASE: $dbh->errstr\n"; my $sth = $dbh->prepare("UPDATE T_LINKS set HITS_LINKS = HIT_LINKS+1 where URL_LINKS = '$Url'"); $sth->execute || error("Error: Unable execute query:$dbh->err, $dbh->errstr"); $sth->finish; $dbh->disconnect; if ($DEBUG == 1) { print LOGFILE "Execution requete Update - OK\n"; } } } if ($TRACEFILE == 1) { if ($ENV{REMOTE_ADDR} !~ /$EXCLUDEIP/) { open(FICHIER,">>$TXTDIR/$TXTFILE") || error("Error: Enable to open trace file $TXTDIR/$TXTFILE: $!"); print FICHIER "$nowyear-$nowmonth-$nowday $nowhour:$nowmin:$nowsec\t$ENV{REMOTE_ADDR}\t$Url\n"; close(FICHIER); } } # Redir html instructions print "Location: $Url\n\n"; if ($DEBUG) { print LOGFILE "Redirect to $Url\n"; close(LOGFILE); } 0;