Ich hab ein Clickcounter-Script welches auf Textfiles basiert. Es läuft einwandfrei, doch eine Änderung hätte ich gern.
Erstmal ein Auszug aus dem Script:
Eigentlich ist es für Downloads al gedacht gewesen, aber ich habs auf Links soweit abgestimmt. Nun möchte ich, dass wenn ich die Funktion
aufrufe, dann statt der Message
eine Weiterleitung auf den angegebenen Link aufgerufen wird, ohne dass diese für die angegebene Zeit der Ip-Sperre gezählt wird.
Danke schonmal für jede Art der Hilfe!
Erstmal ein Auszug aus dem Script:
PHP-Code:
$ipdatei = "data/ip.txt";
if (!file_exists($ipdatei))
{
$fd=fopen($ipdatei,"w+");
fclose($fd);
}
$file = file("data/links.txt");
foreach($file as $line)
{
list($id,$url) = explode("|",$line);
$down[$id] = $url;
}
if(empty($_GET['id']))
{
echo "Insert ID!";
}
else
{
if(empty($down[$_GET['id']]))
{
echo "This ID is not used";
}
else
{
$ip = $_SERVER['REMOTE_ADDR']; //IP abfragen
if (($ip == "127.0.0.1") && ($_SERVER['HTTP_X_FORWARDED_FOR'] != ""))
{
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
}
$url = $down[$_GET['id']];//downloadurl wird zugewiesen
$exists = FALSE;//Marker wird gesetzt
$timestamp = time();//unixtime für IP-Sperre wird ermittelt
$file = file($ipdatei);
$ipdatei = fopen($ipdatei,"w+");
foreach ($file as $line)
{
$exp_line = explode("|", $line);
if (($exp_line[0] == $ip) && ($exp_line[1] == $_GET['id'])) //wenn die Zeile der Schleife die IP beinhaltet
{
$exists = TRUE; //hier wird der marker auf true gesetzt, da die IP schon vorkommt
if(($exp_line[2]+ 60*$dauer) < $timestamp) // IP ist nicht mehr gesperrt
{
fputs($ipdatei, "$exp_line[0]|$exp_line[1]|$timestamp\n"); //neue Daten für diese IP werden geschrieben...
counten($url);//Funktion counten wird aufgerufen und die Downloadurl mitgeliefert
}
else //IP ist noch gesperrt
{
fputs($ipdatei, "$line");
echo "<center><font color = \"red\"><b>Du hast gerade eben das file schon gezogen und bist vorerst für $dauer min gesperrt</b></font></center>";
}
}
else //wenn die Zeile der Schleife die IP nicht beinhaltet...
{
if(($exp_line[2]+ 60*$dauer) > $timestamp) //und noch eine Sperre für diese Zeile existiert...
{
fputs($ipdatei, "$line"); //wird sie nochmal gleich reingeschrieben, ansonsten wird sie gelöscht!
}
}
}
if ($exists == FALSE) //hier wird der oben gesetzte Marker abgefragt, wenn er nicht auf TRUE ist, ist die IP neu und wird eingefügt
{
$id = $_GET['id'];
fputs($ipdatei, "$ip|$id|$timestamp\n"); //neue Zeile für neue IP wird geschrieben
counten($url);//Funktion counten wird aufgerufen und die Downloadurl mitgeliefert
}
fclose($ipdatei);
}
}
function counten($url)
{
global $email, $dl_to_mail,$domain;
Header("Location: ".$url);
header("Expires: Mon, 10 Jan 1970 01:01:01 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Pragma: no-cache");
$id=$_GET['id'];//eintrag in counter.txt wird vorbereitet
$date = date("d.m.y");
$time = date("H:i");
$countfile="data/counter.txt";
$treffer=FALSE;
$file = file($countfile);
$fd=fopen($countfile,"w+");
foreach ($file as $line) {
$exp_line = explode("|", $line);
if ($exp_line[0] == $id) {
$count=$exp_line[1];
$count++;
$new_line = "$id|$count|$date|$time\n";
fputs($fd, $new_line);//update alter Eintrag
}
else {
fputs($fd, $line);//update neuer Eintrag
}
}
fclose($fd);
//folgendes nur, wenn du erst nach einigen DLs eine mail haben willst!
if ($dl_to_mail > 1)
{
$maildat = "data/countmail.txt";
$maildattemp = fopen($maildat, "a+");
fwrite($maildattemp, "$id|$date|$time\n");
fclose($maildattemp);
$inhalt = file($maildat,"r");
$anzahl = count($inhalt);
fclose($inhalt);
if ($anzahl >= $dl_to_mail)
{
$maildat = "data/countmail.txt";//hier wird die Datei countmail.txt eingelesen, um die zur email hinzuzufügen
$maildat=file($maildat);
foreach ($maildat as $zeile)
{
$listlines .= $zeile;
}
$header.="From: \"Download-Counter\" $domain\n";
$header.="MIME-Version: 1.0\n";
$header.="Content-Type: text/plain;\n";
$header.="X-Mailer: PHP/".phpversion();
mail("$email", "Downloadcounter", "$date - $time Uhr\n\n Hinweis vom dlcounter-ROBOT: Es wurden seit der letzten Benachrichtigung weitere $dl_to_mail Downloads gezogen\n\nDiese gliedern sich zeitlich wie folgt:\n$listlines","$header");
$maildat = "data/countmail.txt";
$maildattemp=fopen($maildat,"w+");//hier wird die maildat wieder gelöscht!
fputs($maildattemp,"");
fclose($maildattemp);
}
}
//folgendes, wenn du bei jedem DL eine Nachricht haben willst!
else
{
$header.="From: \"Download-Counter\" $domain\n";
$header.="MIME-Version: 1.0\n";
$header.="Content-Type: text/plain;\n";
$header.="X-Mailer: PHP/".phpversion();
mail("$email", "Downloadcounter", "Neuer Download\n\nZeit: $date - $time Uhr\nder Download mit der ID $id wurde runtergeladen","$header");
}
}
?>
PHP-Code:
$dauer = 5;//Dauer der Reloadsperre in Minuten
Du hast gerade eben das file schon gezogen und bist vorerst für 5 min gesperrt
Danke schonmal für jede Art der Hilfe!
Kommentar