webmaster webmastering webdesign

Jesteś tutaj: webmade.org >> porady >> php + mysql

Licznik on-line

autor: Andrzej Kretowicz, ostatnia modyfikacja: 2007-02-23

szukaj: licznik licznik licznik on-line licznik on-line skrypt PHP skrypt PHP PHP PHP

Chyba każdy webmaster zauważył, że na stronach coraz częściej pojawiają się liczniki gości aktualnie oglądających stronę - jest to ciekawy "bajer". Jeśli ktoś próbował ściągać gotowe skrypty, to pewnie zauważył, że one bardzo często nie działają, a niektóre podają losową liczbę - to raczej kiepskie rozwiązanie, a kiedyś pisałem w PHP stronę szkolną i postanowiłem napisać licznik gości on-line, skrypt wyszedł bardzo dobrze, bo to tylko jedna krótka funkcja, która zwraca wynik. Oto kod wraz z komentarzami:

<?php
if (!session_is_registered('count')) {
  session_start();
  session_register('count');
  $count = 0;
}
else {
  $count++;
}
/* Rozpocząłem sesje i zarejestrowałem zmienną $count. */
?>

<?php
$conn = mysql_connect("localhost", "user", "password");
mysql_select_db("baza", $conn);
// to było połączenie się z MySQL

function stats($mojeip)// argumentem jest tutaj IP, ale możesz zmienić na identyfikator sesji
{
  global $conn;
  global $count;
  // globalizacja zmiennych, aby ich wartość była dostępna w funkcji
  $teraz = time();
  // pobiera czas
  if ($count == 0) // sprawdza, czy ma wstawić nowy rekord do tabeli
  {
    $res = mysql_query("INSERT INTO temp VALUES ('$mojeip', '$teraz')", $conn);
    // wstawienie nowego rekordu
  }
  $res = mysql_query("UPDATE `temp` SET `czas` = '".$teraz."' WHERE `ip` = '".$mojeip."' LIMIT 1'", $conn);
  // a teraz uaktualnienie naszego rekordu
  $res = mysql_query("SELECT * FROM temp", $conn);
  // wybieramy wszystko z tabeli temp
  for ($i=0; $myrow=mysql_fetch_assoc($res); $i++)
  {
    $ip = $myrow['ip'];
    $czass= $myrow['czas'];

    if ($czass < ($teraz - 600))
    {
      $pyt=mysql_query("DELETE from temp where ip='$ip'", $conn);
      $i--;
    }
    /* W pętli sprawdziliśmy, czy czasy użytkowników są mniejsze niż 10 min (600 sek), jeśli nie to kasujemy go z tabeli */
  }
  if ($i==0) 
  {
    $res = mysql_query("INSERT INTO temp VALUES ('$mojeip', '$teraz')", $conn);
    // jeśli ktoś nas skasował, to musimy się dodać, bo liczba userów nie może być równa 0!
    $i++;
  }
  return $i;
  // zwracamy wartość
}
?> 

Aby wywołać tą funkcje wstaw na stronie ten kod:

<?php
echo(stats($REMOTE_ADDR));
?> 

lub:

<?php
echo(stats(SID));
?>

W obydwu przypadkach powinno działać. To już koniec, tego skryptu możecie używać do woli oczywiście

Andrzej Kretowicz

Osoby czytające tę publikację przeglądały również:

Chcesz zostać programistą?

Poznaj 6 kroków do efektywnej
nauki programowania!

 

valid XHTML
valid CSS
© 2004-2008 copyright by webmade.org