Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] prosty licznik
Forum PHP.pl > Forum > Przedszkole
Lejto
Mam kod prostego licznika opartego na txt. Ostatnio dziwiły mnie statystyki wiedz postanowiłem napisać prosty skrypt który powie mi jaki jest host danego gościa itp. I taki hosty mam:
crawl-66-249-73-20.googlebot.com, mail.explodelink.com itp mam jakieś zabezpieczenie w moim skrypcie licznika ale to nie skutkuje.
  1. <?
  2. $Bots = array(
  3.  'Alexa'  => 'ia_archiver',
  4.  'Ask Jeeves' => 'ask jeeves',
  5.  'Teoma'  => 'teoma',
  6.  'Baidu Spider'  => 'baiduspider',
  7.  'cURL'  => 'curl',
  8.  'GameSpy' => 'gamespyhttp',
  9.  'Googlebot-Image' => 'googlebot-image',
  10.  'Gigabot' => 'gigabot',
  11.  'Googlebot'  => 'googlebot',
  12.  'Grub'  => 'grub',
  13.  'Inktomi Slurp'  => 'slurp',
  14.  'msnbot' => 'msnbot',
  15.  'AltaVista'  => 'scooter',
  16.  'Yahoo!' => 'yahoo!',
  17.  'Lycos'  => 'lycos',
  18.  'Whatuseek' => 'whatuseek',
  19.  );
  20. foreach($Bots as $bot => $designation)
  21. {
  22.  if(eregi($designation, $_SERVER['HTTP_USER_AGENT']))
  23.  $b0t = $b0t . 1;
  24. }
  25. if($b0t=='' or $bot=='0')
  26. {
  27. $foo = file('licznik.txt');
  28. $ex = @explode('|', $foo[0]);
  29.  
  30. if(!isset($_COOKIE['licz_x']))
  31. {
  32. ((date('n') == @$ex[2])) ?
  33. $ex[3]++ :
  34. $ex[3] = 1;
  35. $ex[2] = date('n');
  36.  
  37. ((date('d') == @$ex[0])) ?
  38. $ex[1]++ :
  39. $ex[1] = 1;
  40. $ex[0] = date('d');
  41.  
  42. }
  43.  
  44. if(!isset($_COOKIE['licz_xO']))
  45. {
  46. (empty($ex[4])) ? $ex[4] = 1 : $ex[4]++;
  47. }
  48.  
  49. $write = fopen('licznik.txt', 'w');
  50. flock($write, LOCK_EX);
  51. fwrite($write, join('|',$ex));
  52. flock($write, LOCK_UN);
  53. fclose($write);
  54.  
  55.  
  56. $hours = date('G');
  57. $minutes = date('i');
  58. $hoursleft = 23 - $hours;
  59. $minutesleft = 59 - $minutes;
  60. $hs = $hoursleft * 3600;
  61. $ms = $minutesleft * 60;
  62. $timeleft = $hs + $ms;
  63. if(!isset($_COOKIE['licz_x']) || !isset($_COOKIE['licz_x0']))
  64. {
  65. setcookie('licz_x','x',time()+$timeleft);
  66. setcookie('licz_xO','x',time()+$timeleft);
  67. }
  68.  
  69. print '<table border="0" cellpadding="0" width="" cellspacing="0" bordercolor="#9CACAD" ><tr><td>';
  70. print '<font size=2px>Dzisiaj: ' . $ex[1]; ?> <br><?
  71. print ' Ten miesiąc: ' . $ex[3];?> <br><?
  72. print ' Wszystkich odsłon: ' . $ex[4]; ?> <br><?
  73. }
  74. print ' Gości: '.$ile2;
  75. print ' </font></td></tr></table>';

Czy w tablicy z botami dodać adresy url czy co/?
marcio
Nie rozumiem zabardzo co chcesz robic smile.gif jesli chodzi o cos anty dodawanie sie do licznika czy cos zapisuj host i ip i potem sprawdzaj smile.gif
Pilsener
Bez sensu jest używanie eregi do sprawdzenia, czy useragent nie zawiera jakiś tam ciągów - ktoś tak zrobił w czasach Matuzalema a teraz każdy powiela. Po pierwsze jest to mało wydajne, a po drugie - daremne, bo to, co widzimy w user-agencie nie jest gwarancją absolutnie niczego. Kolejna sprawa to wykorzystanie cookies - otóż trudno, aby każdy (a bot w szczególności) akceptował ciastka (a nawet nie sprawdzasz, czy ktoś akceptuje ciastka czy nie).

Praktycznie nie da się zrobić funkcjonalnego i wydajnego licznika na plikach tekstowych. Użyj bazy danych, choćby coś w stylu:
http://forum.php.pl/index.php?showtopic=90582

Jeśli masz problemy z botami to polecam filtry oraz cachowanie.
Lejto
ok, dzięki za link, no ale chce go zabezpieczyć tylko prze botami np. tymi które podałem, mam na początku kodu tablice przeciwko botom ale widocznie wszystkiego nie blokuje
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.