»  Pagina principala  »  PHP si mysql »  Numara vizitatorii online pe site-ul tau

Numara vizitatorii online pe site-ul tau

Te-ai intrebat vre-odata cati vizitatori sunt online la un moment dat pe site-ul tau In acest tutorial vom analiza o metoda efectiva de a afisa numarul total de vizitatori online pe site.

Variabila $sessionTimeInMin reprezinta numarul de minute ce trebuie sa treaca inainte de a reseta contorul. Un vizitator nu mai este luat in calcul doar daca nu a realizat nici o actiune in intervalul de minute mai sus mentionat.
 Incepem prin a crea o clasa care se va ocupa de statisticile noastre.
 

<?php
class VisitorCounter {
    var $sessionTimeInMin = 5;
}
?>

Functia constructoare a clasei va actualiza basa de date stergand vizitatorii inactivi si adaugand / actualizand restul de vizitatori.

public  function VisitorCounter()
      {
          $ip = $_SERVER['REMOTE_ADDR'];
          $this->cleanVisitors();
          if ($this->visitorExists($ip))
          {
              $this->updateVisitor($ip);
          } else
          {
              $this->addVisitor($ip);
          }
      }


 
 Acum cream functia care se va ocupa strict de sterge vizitatorilor inactivi in perioada X de minute

private  function cleanVisitors()
      {
          $sql = "select * from counter";
          $res = mysql_query($sql);
          while ($row = mysql_fetch_array($res))
          {
              if (time() - $row['lastvisit'] >= $this->sessionTimeInMin * 60)
              {
                  $dsql = "delete from counter where id = $row[id]";
                  mysql_query($dsql);
              }
          }
      }

Urmeaza functia care se ocupa de verificarea vizitatorilor in baza de date. Daca un vizitator nu este in baza de date va returna false

public function visitorExists($ip)
    {
        $sql = "select * from counter where ip = '$ip'";
        $res = mysql_query($sql);
        if (mysql_num_rows($res) > 0)
        {
            return true;
        } else
            if (mysql_num_rows($res) == 0)
            {
                return false;
            }
    }

Urmatoara functie va actualiza un vizitator daca acesta exista in baza de date

private  function updateVisitor($ip)
    {
        $sql = "update counter set lastvisit = '" . time() . "' where ip = '$ip'";
        mysql_query($sql);
    }


Functia care urmeaza se va ocupa de adaugarea unui vizitator daca acesta nu exista in baza de date

private  function addVisitor($ip)
    {
        $sql = "insert into counter (ip ,lastvisit) value('$ip', '" . time() . "')";
        mysql_query($sql);
    }

Acum aflam numarul de vizitatori din baza de date online pe site

public  function getAmountVisitors()
    {
        $sql = "select count(id) from counter";
        $res = mysql_query($sql);
        $row = mysql_fetch_row($res);
        return $row[0];
    }

Urmatoarea bucata de cod se va ocupa de afisarea efectiva a counter-ului in pagina 

public function show()
    {
        echo '<div style="padding:5px; margin:auto; background-color:#fff"><b>' . $this->getAmountVisitors() . 'visitors online</b></div>';
    }

 In final vom obtine un script php pe care il poti salva de exmplu ca Counter.class.php al carui cod arata dupa cum urmeaza:

<?php
class VisitorCounter
{
    var $sessionTimeInMin = 5; // time session will live, in minutes
  public  function VisitorCounter()
    {
        $ip = $_SERVER['REMOTE_ADDR'];
        $this->cleanVisitors();
        if ($this->visitorExists($ip))
        {
            $this->updateVisitor($ip);
        } else
        {
            $this->addVisitor($ip);
        }
    }
   public function visitorExists($ip)
    {
        $sql = "select * from counter where ip = '$ip'";
        $res = mysql_query($sql);
        if (mysql_num_rows($res) > 0)
        {
            return true;
        } else
            if (mysql_num_rows($res) == 0)
            {
                return false;
            }
    }
  private  function cleanVisitors()
    {
        $sessionTime = 30;
        $sql = "select * from counter";
        $res = mysql_query($sql);
        while ($row = mysql_fetch_array($res))
        {
            if (time() - $row['lastvisit'] >= $this->sessionTimeInMin * 60)
            {
                $dsql = "delete from counter where id = $row[id]";
                mysql_query($dsql);
            }
        }
    }
  private  function updateVisitor($ip)
    {
        $sql = "update counter set lastvisit = '" . time() . "' where ip = '$ip'";
        mysql_query($sql);
    }
  private  function addVisitor($ip)
    {
        $sql = "insert into counter (ip ,lastvisit) value('$ip', '" . time() . "')";
        mysql_query($sql);
    }
  public  function getAmountVisitors()
    {
        $sql = "select count(id) from counter";
        $res = mysql_query($sql);
        $row = mysql_fetch_row($res);
        return $row[0];
    }
   public function show()
    {
        echo '<div style="padding:5px; margin:auto; background-color:#fff"><b>' .
            $this->getAmountVisitors() . 'visitors online</b></div>';
    }
}
?>

Utilizarea counter-ului se face foarte simplu utilizand doar 3 linii de cod


<?php
require "Counter.class.php"; // the counter class itself
$counter = new VisitorCounter;
$counter->show();
?>

NOTA: in acest tutorial nu ne ocupam in amanunt de conectarea la baza de date si / sau utilizarea conexiunilor / extragerea datelor. Tutorial adaptat dupa ineedtutorials.com punctweb.com nu-si asuma raspunderea pentru eventualele daune provocate de punerea eventual defectuoasa in practica a acestui tutorial. 

 





Link-ul autorului:
www.punctweb.com/articole-si-tutoriale/numara-vizitatorii-online-pe-site-ul-tau.html

Comentarii



   Sandor

Foarte bun tutorial!

Eu ca si programator metoda show() as transforma in metoda statica, ex:
public static function show();

astfel pentru apelare avem "2 linii de cod":

require "Counter.class.php"; // the counter class itself
VisitorCounter::show();

=============
In plus in loc de echo din metoda show() as lasa doar un return pentru nr de vizitatori si formatarea se face in html / css.

20-Aug-2011 - 04:33



Voteaza acest articol!
 



Trimite un comentariu!

Nume *
E-mail *
Comentariu *
  Vreau sa fiu anuntat de urmatoarele mesaje la acest articol

Security image

punctweb .com

Freelancer
http://www.punctweb.com

Cloud tag

tutorial, photoshop, html, css, javascript, flash, php, mysql, grafica 3D, tutorial, coduri, scripturi, generator de coduri, cursuri php