Link Counter mit IP Sperre (Daten in dat Dateien)

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Link Counter mit IP Sperre (Daten in dat Dateien)

    Liegt es eventuell daran das es noch so früh ist???

    Naja ich bin grade Dabei so einen kleinen Counter für meine Partnerseiten am basteln, gesagt getan.

    Hier mal der Code:

    Quellcode

    1. <?php
    2. // Counter Eintsellungen
    3. $partner_uri = $_SERVER['QUERY_STRING'];
    4. $new_url = "http://www.".$partner_uri."";
    5. echo $counterdat;
    6. $file = "ip_data.dat";
    7. // IP Serre
    8. $duration = 30*60; // 30 Minuten
    9. $lines = file($file);
    10. foreach($lines as $line) {
    11. list($ip, $time) = explode("µ", $line);
    12. if($time > time()-$duration) {
    13. $ips[$ip] = trim($time);
    14. }
    15. }
    16. $ip = $_SERVER['REMOTE_ADDR'];
    17. if(@array_key_exists($ip, $ips)) {
    18. if($ips[$ip] > time()-$duration) {
    19. // TRUE
    20. $ips[$ip] = time();
    21. $was_here = TRUE;
    22. }
    23. } else {
    24. $ips[$ip] = time();
    25. $was_here = FALSE;
    26. }
    27. $fp = fopen($file, "w");
    28. foreach($ips as $ip=>$time) {
    29. fputs($fp, $ip."µ".$time."\n");
    30. }
    31. fclose($fp);
    32. if($was_here) {
    33. header( 'Location: '.$new_url.'' );
    34. exit();
    35. } else {
    36. $counterdat = "".$partner_uri.".dat";
    37. $datei = fopen("$counterdat","w");
    38. $counter = fgets($datei, 10);
    39. $counter = $counter + 1;
    40. rewind($datei);
    41. file_put_contents("$datei",$counter);
    42. fclose($datei);
    43. header( 'Location: '.$new_url.'' );
    44. exit();
    45. }
    46. ?>
    Alles anzeigen


    So gesehen wird wenn jetzt ein User auf einen Partnerlink klickt halt im Ordner ./out eine neue Datei wie z.B. easy-coding.de.dat angelegt und oder die alte ausgelesen & um 1 erhöht was aus unerklärlichen Gründen derzeit auch nicht geht :shock:

    Jetzt möchte ich irgendwie:

    1. Das der Counter wirklich um 1's erhöht wird!
    2. Das aber nur nicht geht wenn der User schon diesen Partnerlink angeklickt hat (Derzeit wird ja schon nicht mehr erhöht wenn der User einen anderen Link geklickt hat :roll: )

    Ich komme nicht mehr klar...

    Danke schon mal für Hilfe :wink:
  • Hi,
    solltest du die datei nicht auch zum lesen öffnen, wenn du mit fgets drauf zugreifst?

    Quellcode

    1. $datei = fopen("$counterdat","w");

    [phpdoc]fopen[/phpdoc]

    überflüssig im code ist die if/else
    da am ende ja sowieso weitergeleitet wird

    außerdem solltest du den [phpdoc]header[/phpdoc] auf eine permanente weiterleitung umstellen - ist aus suchmaschinen-sicht besser für beide seiten des linktauschs

    Quellcode

    1. header("HTTP/1.1 301 Moved Permanently");
    2. header("Location: http://www.url.tld");
  • So wirklich bin ich mir jetzt nicht im klaren was du meinst dOnUt :shock:

    Die Datei wird doch gelesen, oder nicht?

    Also ich hab das ganze jetzt mal ein bisschen anders geschrieben & jetzt werden wenigstens die Counter Dateien erstellt!

    Aber eigendlich wollte ich das jetzt ja so haben das die Ip Sperre halt nur für diesen Link gilt.

    Beispiel:

    User klickt auf denn Partnerlink http://www.xxx.tld/out/easy-coding.de
    die Ip Sperre wird für ihn für diesen Link gesetzt.
    Derzeit wird ja kein Hit mehr gezählt wenn der User schon auf einen Link geklickt hat!

    Quellcode

    1. $datei = fopen("$counterdat","w");


    Öffne ich sie doch!
  • "Torsten" schrieb:

    Die Datei wird doch gelesen, oder nicht?


    nein, wird sie eben nicht - wenn du sie mit dem parameter "w" öffnest, dann wird der inhalt einfach gleich null gesetzt - ohne den inhalt der datei zu lesen
    "r+" öffnet zum lesen und schreiben

    (hab außerdem die intval funktion benutzt, damit das \n gleich ignoriert wird)

    so inkrementierst du den wert korrekt

    Quellcode

    1. $datei = fopen("$counterdat","r+");
    2. $counter = intval(fgets($datei, 10));
    3. rewind($datei);
    4. $counter++;
    5. fwrite($datei, $counter);
    6. fclose($datei);
  • Ich hätte mir vieleicht mal http://www.easy-coding.de/php/fopen.html durchlesen sollen :lol:

    Danke schön wenn es dich nicht gebe dann :roll:

    Wenn ich mich nicht irre wird jetzt aber nicht mehr wie gewünscht & falls nicht vorhanden eine neue Counter Datei angelegt sprich wenn es die Datei www.easy-coding.de.dat nicht gibt gibts ne Meldung & dann wird bei reload weitergeleitet die Datei aber nicht erstellt...

    Zumindest wird sie bei mir nicht erstellt...

    Ich könnte ja natürlich irgendwie so eine Datei anlegen

    Und noch dazu fällt mir grade auf das die Zahl in denn Counterdateien nicht einfach um 1 erhöht werden sonder dann erst 1 dahinter eine 2 dahinter eine 3 usw gesetzt wird...
  • Wunder schön irgendwie klappt jetzt alles eigendlich mit diesem Code :D

    Quellcode

    1. <?php
    2. // Counter Eintsellungen
    3. $partner_uri = $_SERVER['QUERY_STRING'];
    4. $new_url = "http://www.".$partner_uri."";
    5. $file = "ip_data.dat";
    6. // IP Serre
    7. $duration = 30*60; // 30 Minuten
    8. $lines = file($file);
    9. foreach($lines as $line) {
    10. list($ip, $time) = explode("µ", $line);
    11. if($time > time()-$duration) {
    12. $ips[$ip] = trim($time);
    13. }
    14. }
    15. $ip = $_SERVER['REMOTE_ADDR'];
    16. if(@array_key_exists($ip, $ips)) {
    17. if($ips[$ip] > time()-$duration) {
    18. // TRUE
    19. $ips[$ip] = time();
    20. $was_here = TRUE;
    21. }
    22. } else {
    23. $ips[$ip] = time();
    24. $was_here = FALSE;
    25. }
    26. $fp = fopen($file, "w");
    27. foreach($ips as $ip=>$time) {
    28. fputs($fp, $ip."µ".$time."\n");
    29. }
    30. fclose($fp);
    31. if($was_here) {
    32. header( 'Location: '.$new_url.'' );
    33. exit();
    34. } else {
    35. $counterdat = "".$partner_uri.".dat";
    36. if(file_exists($counterdat)){
    37. $datei = fopen("$counterdat","r+");
    38. $counter = intval(fgets($datei, 10));
    39. $counter++;
    40. rewind($datei);
    41. fwrite($datei, $counter);
    42. fclose($datei);
    43. header( 'Location: '.$new_url.'' );
    44. exit();
    45. }
    46. else{
    47. $datei = fopen("$counterdat","w");
    48. fclose($datei);
    49. $datei = fopen("$counterdat","r+");
    50. $counter = intval(fgets($datei, 10));
    51. $counter++;
    52. rewind($datei);
    53. fwrite($datei, $counter);
    54. fclose($datei);
    55. header( 'Location: '.$new_url.'' );
    56. exit();
    57. }
    58. }
    59. ?>
    Alles anzeigen


    Jetzt hätte ich das gerne nur noch so das die IP Sperre immer nur für einen Link gilt sprich der User kann in der angegebenen Zeit nur 1 Mal für eine Partnerseite einen Hit abgeben...

    [Blockierte Grafik: http://cosgan.de/images/midi/konfus/a015.gif]

    Also eigendlich hmm:

    Meine Idee für jede Counterdat auch ne Ip dat anlegen alá easy-coding.de_ip.dat
    und dann halt die andere Ip Sperre ein wenig verändern oder zu umständlich???
  • hast du irgendwelche chmod rechte vergessen

    der ordner, in dem du die .dat dateien erstellst, muss chmod 0777 sein
    die ip_data.dat muss 0666 sein
    und die domain.dat erstellst du am besten auch mit 0777, damit du sie sowohl per ftp löschen kannst, als auch per browser

    hier nochmal "meine" version

    Quellcode

    1. <?php
    2. // Counter Einstellungen
    3. $partner_uri = $_SERVER['QUERY_STRING'];
    4. $new_url = "http://www.".$partner_uri."";
    5. $file = "ip_data.dat";
    6. // IP Serre
    7. $duration = 30*60; // 30 Minuten
    8. $lines = file($file);
    9. foreach($lines as $line) {
    10. list($ip, $time) = explode("µ", $line);
    11. if($time > time()-$duration)
    12. $ips[$ip] = trim($time);
    13. }
    14. $ip = $_SERVER['REMOTE_ADDR'];
    15. if(@array_key_exists($ip, $ips)) {
    16. if($ips[$ip] > time()-$duration) {
    17. // TRUE
    18. $ips[$ip] = time();
    19. $was_here = TRUE;
    20. }
    21. } else {
    22. $ips[$ip] = time();
    23. $was_here = FALSE;
    24. }
    25. //IP Adresse speichern
    26. $fp = fopen($file, "w");
    27. foreach($ips as $ip=>$time) {
    28. fputs($fp, $ip."µ".$time."\n");
    29. }
    30. fclose($fp);
    31. //Inkrementieren?
    32. if(!$was_here) {
    33. $counterdat = "".$partner_uri.".dat";
    34. if(!touch($counterdat))
    35. echo 'CHMOD des ordners stimmt nicht';
    36. chmod($counterdat, 0777);
    37. $datei = fopen("$counterdat","r+");
    38. $counter = intval(fgets($datei, 10));
    39. rewind($datei);
    40. fwrite($datei, ++$counter);
    41. fclose($datei);
    42. }
    43. //Weiterleiten
    44. header("HTTP/1.1 301 Moved Permanently");
    45. header( 'Location: '.$new_url.'' );
    46. exit();
    47. ?>
    Alles anzeigen


    PS: Warum rückst du deinen code nicht ein *gg*
  • "d0nUt" schrieb:


    PS: Warum rückst du deinen code nicht ein *gg*


    :shock: Null Ahnung

    Naja auf jeden Fall jetzt hab ich das Problem das das Script nicht mehr auf die Url sprich wenn ich out/?easy-coding.de habe leitet er nicht mehr auf die $new_url um die durch das http://www. + easy-coding.de ja eigendlich http;//www.easy-coding.de heißen müsste


    ... Schau noch mal nach und :shock: komisch der hat denn Ordner out jetzt 004 ansatt wie befohlen 777 und ich bekomme es auch nicht mehr geändert... :?
  • Also ich nutze FileZilla ich hab denn Ordner out makiert hab rechts geklickt und dann halt auf Dateiatrribute. Dort habe ich dann bei Nummerischer Wert 777 eingeben und auf und auf Ok gedrückt da das mit denn Dateien dann gar nicht mehr funktionier hat habe ich geschaut & da stand dann auf einmal 004 :shock:

    Zu der Weiterleitung

    Ich habe mir jetzt einen zweiten Ordner angelegt ./out2 und da hab ich denn chmod auf 777.

    So irgendwie ich nehme das Script was du gepostet hattest und dann kommt

    1. Die Fehlerseite 403
    2. Die Weiterleitung funktioniert aber weder die IP wird in der Datei ip_dat.dat (cmod 666) noch der Counter erhöht
    3. Oder irgendwas anderes hab noch nicht alles geshen

    Komisch!!!