Hi,
jaja "alle Tage wieder ... " oder so ähnlich
Diesmal ist es aber doch ein tiefgreifenderes Problem als üblich.
Also um mal anzufangen, ich hab auf meiner Seite eine Art Gallerie, da
wollte ich das man per Klick auf das Bild selbst es direkt downloaden kann
(ohne erst rechte maustaste - speichern unter) zu wählen.
Das konnte ich mittels eines PHP Headers realisieren den ich per Google
mehr oder weniger gefunden und angepasst habe. Dazu wollte ich jeden
Klick zählen der auf das Bild gemacht wurde. Auch dazu hab ich ein Script
gefunden.
Allerdings hab ich das Problem das das ganze in Kombination einfach nicht
laufen will wenn die Bilder unter 4kb sind und ich weiß ums ********* net
wieso das so ist ...
Aber um mal von der "Theorie" zur "Praxis" zu kommen, poste ich mal die
Codes:
bilder.php (Seite mit den Bildern und den Hyperlinks die darauf
verweisen) - Also so sieht ein Link dann bei mir aus :
Das id=***** spricht das Klick Counter Script an und das filename den
Header. Und funktioniert auch bei Bild01 zum Beispiel weil es grösser als
4kb ist.
count.php - Ist das Scriptfile von dem Counter - In diesem hab ich
ganz oben auch den PHP Header reingebastelt. Der wie folgt aussieht :
Direkt darunter kommt dann das eigentliche Count Script:
So nun ist noch folgendes zu erwähnen - Ich sagte ja oben das
beispielsweise das ebay01.gif quasi ebay01 geht (direkt download als
auch klick zähler)
So wenn ich das ganze aber auf ein Bild anwende das kleiner als 4kb ist
(Nennen wir es mal ebay05.gif bzw. ebay05), dann geht der Direkt
Download nicht (Klick Count aber schon) - Jedenfalls wird dann anstatt das
Bild runterzuladen, die PHP Header funktion ausser Kraft gesetzt und das
Bild standardmässig angezeigt.
So wenn ich aber bei der Zeile :
<a href="dlcounter/count.php?filename=ebay05&id=ebay05"><img src="pics/ebaypics/ebay05.gif" alt="" border="0"></a>
das "&id=ebay05" rausmache, das für den Klick Counter steht, dann geht
plötzlich der direkt download ....
Hoffe das ganze war jetzt nicht zu verwirrend, falls doch dann fragt.
Ich komme hier jedenfalls nicht mehr weiter und kann mir das auch nicht
erklären ...
Aber ich bin zuversichtlich das mir einer von euch sagen kann woran das
liegt
Natheedo
jaja "alle Tage wieder ... " oder so ähnlich
Diesmal ist es aber doch ein tiefgreifenderes Problem als üblich.
Also um mal anzufangen, ich hab auf meiner Seite eine Art Gallerie, da
wollte ich das man per Klick auf das Bild selbst es direkt downloaden kann
(ohne erst rechte maustaste - speichern unter) zu wählen.
Das konnte ich mittels eines PHP Headers realisieren den ich per Google
mehr oder weniger gefunden und angepasst habe. Dazu wollte ich jeden
Klick zählen der auf das Bild gemacht wurde. Auch dazu hab ich ein Script
gefunden.
Allerdings hab ich das Problem das das ganze in Kombination einfach nicht
laufen will wenn die Bilder unter 4kb sind und ich weiß ums ********* net
wieso das so ist ...
Aber um mal von der "Theorie" zur "Praxis" zu kommen, poste ich mal die
Codes:
bilder.php (Seite mit den Bildern und den Hyperlinks die darauf
verweisen) - Also so sieht ein Link dann bei mir aus :
Code:
<a href="dlcounter/count.php?filename=ebay01&id=ebay01"><img src="pics/ebaypics/ebay01.gif" alt="" border="0"></a>
Header. Und funktioniert auch bei Bild01 zum Beispiel weil es grösser als
4kb ist.
count.php - Ist das Scriptfile von dem Counter - In diesem hab ich
ganz oben auch den PHP Header reingebastelt. Der wie folgt aussieht :
PHP-Code:
<?php
$id = $_GET['id'];
$filename = $_GET['id'];
$picture_path = "../pics/ebaypics/";
if (isset($filename)) {
$filename = $filename . ".gif";
$filename_compl = $picture_path . $filename;
} else {
echo "Keine Datei angegeben";
EXIT;
}
if (!file_exists($filename_compl)) {
echo "Datei existiert nicht!";
EXIT;
}
if (PMA_USR_BROWSER_AGENT == 'IE') {
header('Content-Disposition: inline; filename="' . $filename . '"');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
} else {
header('Content-Disposition: attachment; filename="' . $filename . '"');
header('Expires: 0');
header('Pragma: no-cache');
}
$filesize = filesize("$filename_compl");
$datei = fopen("$filename_compl", "r");
if($filesize<=0) { $filesize="1048576"; }
$text = fread($datei, $filesize);
echo("$text");
fclose($datei);
PHP-Code:
$email="administrator@domain.de";//bitte hier deine email angeben
$domain = ""; //optional deine domain angeben: muss nicht angegeben werden!
$dauer = 0;//Dauer der Reloadsperre in Minuten
$dl_to_mail = 500; //Anzahl an DL´s, nach denen eine email geschickt werden soll
//und jetzt gehts auch schon los...
$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);
?>
So nun ist noch folgendes zu erwähnen - Ich sagte ja oben das
beispielsweise das ebay01.gif quasi ebay01 geht (direkt download als
auch klick zähler)
So wenn ich das ganze aber auf ein Bild anwende das kleiner als 4kb ist
(Nennen wir es mal ebay05.gif bzw. ebay05), dann geht der Direkt
Download nicht (Klick Count aber schon) - Jedenfalls wird dann anstatt das
Bild runterzuladen, die PHP Header funktion ausser Kraft gesetzt und das
Bild standardmässig angezeigt.
So wenn ich aber bei der Zeile :
<a href="dlcounter/count.php?filename=ebay05&id=ebay05"><img src="pics/ebaypics/ebay05.gif" alt="" border="0"></a>
das "&id=ebay05" rausmache, das für den Klick Counter steht, dann geht
plötzlich der direkt download ....
Hoffe das ganze war jetzt nicht zu verwirrend, falls doch dann fragt.
Ich komme hier jedenfalls nicht mehr weiter und kann mir das auch nicht
erklären ...
Aber ich bin zuversichtlich das mir einer von euch sagen kann woran das
liegt
Natheedo
Kommentar