Script-ul din aceasta pagina inregistreaza si afiseaza numar de utilizatori si vizitatori online (din ultimile 2 minute).
Principiul este acesta: fiecare utilizator /vizitator este inregistrat intr-un fisier text pe server, sau intr-o baza de date, impreuna cu timpul (Timestamp) ultimei accesari. De fiecare data cand o pagina din site e accesata, scriptul PHP sterge toate inregistrarile mai vechi de un anumit timp (aici 2 minute), adauga utilizatorul /vizitatorul curent apoi preia numarul de inregistrari ramase.
<?php
// Script Utilizatori si vizitatori Online - www.marplo.net/php-mysql/
if(!isset($_SESSION)) session_start(); // porneste sesiunea, daca nu e deja pornita
$filetxt = 'userson.txt'; // fisierul in care sunt adaugati utilizatorii si vizitatorii
$timeon = 120; // numarul de secunde considerat / retinut online
$sep = '^^'; // charactere utilizate pt. a desparti nume_utilizator de Timestamp
$vst_id = '-vst-'; // identificator pt. a sti ca e vizitator, nu utilizator logat
/*
Daca aveti un script de Inregistrare /Logare,
inlocuiti $_SESSION['nume'] cu variabila, sau sesiunea in care e retinut numele utilizatorului
Un script gratuit de Inregistrare /Logare e la:
http://www.marplo.net/php-mysql/utilizatori-inregistrare-autentificare-logare-s.php
*/
// preia numele de utilizator, daca e logat, sau IP-ul vizitatorului (la acesta adauga un identificator de vizitator)
$uvon = isset($_SESSION['nume']) ? $_SESSION['nume'] : $_SERVER['SERVER_ADDR']. $vst_id;
$rgxvst = '/^([0-9\.]*)'. $vst_id. '/i'; // regexp pt. recunoastere rand cu vizitator
$nrvst = 0; // va contine numar vizitatori
// seteaza linia cu utilizator /vizitator, si timestamp-ul curent, ce va fi adaugata in $filetxt
$addrow[] = $uvon. $sep. time();
// verifica daca fisierul din $filetxt exista si poate fi scris
if(is_writable($filetxt)) {
// preia intr-un array liniile adaugate in fisierul din $filetxt
$ar_rows = file($filetxt, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$nrrows = count($ar_rows); // numarul de linii
// daca e cel putin o linie, parcurge array-ul din $ar_rows
if($nrrows>0) {
for($i=0; $i<$nrrows; $i++) {
// ia fiecare linie si separa utilizator /vizitator si timestamp
$ar_line = explode($sep, $ar_rows[$i]);
// verifica timpul si retine in array-ul $addrow inregistrarile din ultimile $timeon secunde
if($ar_line[0]!=$uvon && (intval($ar_line[1])+$timeon)>=time()) {
$addrow[] = $ar_rows[$i];
}
}
}
}
$nruvon = count($addrow); // total online
$usron = ''; // pt. numele utilizatorilor logati
// parcurge $addrow pt. a obtine numarul de vizitatori si utilizatori
for($i=0; $i<$nruvon; $i++) {
if(preg_match($rgxvst, $addrow[$i])) $nrvst++; // incrementeaza vizitatori
else {
// preia si adauga nume utilizator
$ar_usron = explode($sep, $addrow[$i]);
$usron .= '<br/> - <i>'. $ar_usron[0]. '</i>';
}
}
$nrusr = $nruvon - $nrvst; // obtine nr. utilizatori (total - vizitatori)
// codul HTML cu datele ce vor fi afisate
$reout = '<div id="uvon"><h4>Online: '. ($nrusr+$nrvst). '</h4>Vizitatori: '. $nrvst. '<br/>Utilizatori: '. $nrusr. $usron. '</div>';
// adauga in $filetxt datele cu liniile retinute
if(!file_put_contents($filetxt, implode("\n", $addrow))) {
$reout = 'Eroare: Fisierul de inregistrare nu exista sau nu poate fi scris.';
}
// daca e accesare prin <script>, cu GET 'uvon=showon',
// adauga sirul ce va fi returnat intr-o instructiune JavaScript
// cu acest cod, script-ul va putea fi utilizat si in fisiere .html
if(isset($_GET['uvon']) && $_GET['uvon']=='showon') $reout = "document.write('$reout');";
echo $reout; // output /afisare rezultat
?>
<?php include('usersontxt.php'); ?><script type="text/javascript" src="usersontxt.php?uvon=showon"></script>
Acest script (si cel prezentat mai jos) folosesc $_SESSION. La inceputul fisierului PHP in care-l includeti trebuie sa adaugati: session_start();.
<?php
header('Content-type: text/html; charset=utf-8');
// AICI Adaugati datele dv. de conectare la baza de date MySQL
$host = 'localhost'; // adresa server MySQL
$user = 'root'; // Nume utilizator
$pass = 'parola'; // Parola de access
$dbname = 'baza_date'; // Nume baza de date
// conectare la baza de date MySQL
$conn = new mysqli($host, $user, $pass, $dbname);
// verificare conectare
if (mysqli_connect_errno()) exit('Connect failed: '. mysqli_connect_error());
// codul SQL pt. creare tabel "userson"
$sql = "CREATE TABLE `userson` (
`uvon` VARCHAR(32) PRIMARY KEY,
`dt` INT(10) UNSIGNED NOT NULL
) CHARACTER SET utf8 COLLATE utf8_general_ci";
// Executarea interogarii $sql si crearea tabelului
if ($conn->query($sql) === TRUE) echo 'Tabelul "userson" a fost creat';
else echo 'Eroare: '. $conn->error;
$conn->close();
?>
In ambele fisiere trebuie sa adaugati datele dv. pentru conectare la baza de date MySQL, in variabilele: $host, $user, $pass, $dbname .
<?php
// Script Utilizatori si vizitatori Online - www.marplo.net/php-mysql/
if(!isset($_SESSION)) session_start(); // porneste sesiunea, daca nu e deja pornita
// AICI Adaugati datele dv. de conectare la baza de date MySQL
$host = 'localhost'; // adresa server MySQL
$user = 'root'; // Nume utilizator
$pass = 'parola'; // Parola de access
$dbname = 'baza_date'; // Nume baza de date
/*
Daca aveti un script de Inregistrare /Logare,
inlocuiti $_SESSION['nume'] cu variabila, sau sesiunea in care e retinut numele utilizatorului
Un script gratuit de Inregistrare /Logare e la:
http://www.marplo.net/php-mysql/utilizatori-inregistrare-autentificare-logare-s.php
*/
// preia numele de utilizator, daca e logat, sau IP-ul vizitatorului (la acesta adauga un identificator de vizitator)
$vst_id = '-vst-'; // identificator pt. a sti ca e vizitator, nu utilizator logat
$uvon = isset($_SESSION['nume']) ? $_SESSION['nume'] : $_SERVER['SERVER_ADDR']. $vst_id;
$rgxvst = '/^([0-9\.]*)'. $vst_id. '/i'; // regexp pt. recunoastere rand cu vizitator
$dt = time(); // timpul curent (timestamp)
$timeon = 120; // numarul de secunde considerat / retinut online
$nrvst = 0; // va contine numar vizitatori
$nrusr = 0; // va contine numar utilizatori
$usron = ''; // pt. numele utilizatorilor logati
// conectare la baza de date MySQL
$conn = new mysqli($host, $user, $pass, $dbname);
// Definire comenzi SQL pt Delete, Insert/Update, si Select
// Sterge randurile mai vechi de $timeon secunde, Adauga /Update user curent, Selecteaza pe cei ramasi
$sqldel = "DELETE FROM `userson` WHERE `dt`<". ($dt - $timeon);
$sqliu = "INSERT INTO `userson` (`uvon`, `dt`) VALUES ('$uvon', $dt) ON DUPLICATE KEY UPDATE `dt`=$dt";
$sqlsel = "SELECT * FROM `userson`";
// Executa comenzile SQL
if(!$conn->query($sqldel)) echo 'Eroare: '. $conn->error;
if(!$conn->query($sqliu)) echo 'Eroare: '. $conn->error;
$result = $conn->query($sqlsel);
// daca $result contine cel putin un rand
if ($result->num_rows > 0) {
// parcurge setul de rezultate si seteaza numar vizitatori si utilizatori online ($nrvst, $nrusr)
while($row = $result->fetch_assoc()) {
if(preg_match($rgxvst, $row['uvon'])) $nrvst++; // incrementeaza vizitatori
else {
$nrusr++; // incrementeaza utilizatori
$usron .= '<br/> - <i>'.$row['uvon']. '</i>'; // adauga nume utilizator
}
}
}
$conn->close(); // inchide conexiunea MySQL
// codul HTML cu datele ce vor fi afisate
$reout = '<div id="uvon"><h4>Online: '. ($nrusr+$nrvst). '</h4>Vizitatori: '. $nrvst. '<br/>Utilizatori: '. $nrusr. $usron. '</div>';
// daca e accesare prin <script>, cu GET 'uvon=showon',
// adauga sirul ce va fi returnat intr-o instructiune JavaScript
// cu acest cod, script-ul va putea fi utilizat si in fisiere .html
if(isset($_GET['uvon']) && $_GET['uvon']=='showon') $reout = "document.write('$reout');";
echo $reout; // output /afisare rezultat
?>
<?php include('usersmysql.php'); ?><script type="text/javascript" src="usersmysql.php?uvon=showon"></script>
<?php
// Inainte de alt cod ce transmite date, se porneste sesiunea
session_start();
// Apoi se poate adauga restul scriptului si codul paginii
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<title>Numar Vizitatori si Utilizatori Online</title>
<meta name="description" content="Script PHP pt. afisare numar Vizitatori si Utilizatori Online" />
<meta name="keywords" content="utilizatori online, vizitatori online" />
</head>
<body>
<?php
// Includere script ("usersontxt.php", sau "usersmysql.php")
// in locul unde doriti sa fie afisat nr. vizitatori si utilizatori online
include('usersontxt.php');
?>
</body>
</html>
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<title>Numar Vizitatori si Utilizatori Online</title>
<meta name="description" content="Script PHP pt. afisare numar Vizitatori si Utilizatori Online" />
<meta name="keywords" content="utilizatori online, vizitatori online" />
</head>
<body>
<!-- Includere script ("usersontxt.php", sau "usersmysql.php") -->
<script type="text/javascript" src="usersmysql.php?uvon=showon"></script>
</body>
</html>