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
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.
Voteaza acest articol!
Trimite un comentariu!