<?php
$ID = '$Id: referrer.php 457 2005-01-20 07:33:58Z bb $';
require '../app.inc.php';
# configure the stuff below
# your logfile
$todaylog = "/var/log/apache/drbeat.li/access.log";
# ignore the domains below (yours)
# do not add trailing slashes, must start with http://
# you can add as many as you like
# if your site is on a directory on a server,
# example: http://something.edu/~username/,
# add the /~username to the ignore list
$ignore = array();
$ignore[] = "http://www.bolli.homeip.net";
$ignore[] = "http://bolli.homeip.net";
$ignore[] = "http://www.drbeat.li";
# end of config
function noquery($uri) {
$parts = explode('?', $uri);
return $parts[0];
}
$uri = $_GET['uri'];
# use HTTP referrer if it is present and no uri was given
if ($_SERVER['HTTP_REFERER'] !== null && $uri == null)
$uri = $_SERVER['HTTP_REFERER'];
# lose any query arguments
$uri = noquery($uri);
$referrers = array();
error_reporting(1);
# escape $ignore array
for ($count = 0; $count < sizeof($ignore); ++$count) {
$ignore[$count] = str_replace("/", "\/", $ignore[$count]);
$ignore[$count] = '/^' . str_replace(".", "\.", $ignore[$count]) . '/';
}
# read the log file
$fd = fopen($todaylog, "r");
while ($x = fgets($fd, 1024)) {
list( , , , , , , $log_uri, , , , $referrer, ) = explode(" ", $x);
if ($uri !== null and $uri != $log_uri)
continue;
$referrer = substr($referrer, 1, -1); // trim off quotes
if ($referrer == '-') // no empty referrers
continue;
foreach ($ignore as $toig)
if (preg_match($toig, $referrer))
continue 2; // no ignored referrers
$referrer = htmlentities($referrer);
$referrers[] = "<a href=\"$referrer\" rel=\"nofollow\">$referrer</a>";
}
fclose($fd);
$counts = array_values(array_count_values($referrers));
$referrers = array_values(array_unique($referrers));
$app = new Application('Referrer log' . ($uri !== null ? " for $uri" : ''));
$app->head_add = "<meta name=\"robots\" content=\"noindex,nofollow\" />\n";
$app->header();
foreach($referrers as $i => $ref)
print "$ref [{$counts[$i]}]<br />\n";
$app->footer(1);
?>