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.


Utilizatorii si vizitatorii online pot fi stocati intr-un fisier pe server, sau intr-un tabel MySQL.
In acest caz, cred ca utilizarea unui fisier text in care sa fie adaugate si citite inregistrarile e mai rapida decat stocarea lor intr-un tabel MySQL, deoarece sunt necesare mai multe interogari SQL.

Mai intai e prezentata varianta cu inregistrarea intr-un fisier text pe server, apoi metoda cu adaugare in tabel MySQL.

Arhiva ce poate fi descarcata de la link-ul Download de mai sus contine ambele variante, plus fisierele cu exemplele de test prezentate mai jos in aceasta pagina.

• Ambele script-uri pot fi incluse si folosite in fisiere "*.php" (cu include()), si in fisiere "*.html" (cu <script>), dupa cum puteti vedea in exemplele de la sfarsitul paginii; dar serverul trebuie sa ruleze PHP.

Stocare utilizatori si vizitatori online in fisier text

Pentru a adauga cu PHP date intr-un fisier pe server, trebuie sa setati permisiuni CHMOD 0766 (sau CHMOD 0777) la acel fisier, astfel PHP poate sa scrie date in el.

1. - Creati un fisier text pe server (de exemplu, denumit "userson.txt") si dati-i permisiuni CHMOD 0766 (in programul FTP pe care-l folositi, clic-dreapta pe acel fisier, alegeti Properties, apoi selectati optiunile Read, Write, si Execute ).
2. - Creati un fisier PHP (denumit "usersontxt.php") si adaugati in el codul urmator, apoi copiati acest fisier pe server, in acelasi director unde e si "userson.txt".

Codul pentru usersontxt.php

<?php
// Script Utilizatori si vizitatori Online - 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:
    https://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
?>

3. - Daca vreti sa includeti scriptul de mai sus intr-un fisier ".php", adaugati codul urmator in locul unde doriti sa afisati numar utilizatori si vizitatori online:
<?php include('usersontxt.php'); ?>

4. Pentru a afisa numarul de vizitatori si utilizatori intr-un fisier ".html", adaugati in el acest cod:
<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();.

Adaugare utilizatori si vizitatori online in tabel MySQL

Pentru a inregistra si afisa numar vizitatori si utilizatori online folosind un tabel MySQL, trebuie efectuate trei interogari SQL:
  1. Stergere (Delete) randuri mai vechi de un anumit timp.
  2. Adaugare (Insert) rand cu utilizatorul /vizitatorul curent, sau daca e deja adaugat, actualizare (Update) data in coloana cu timpul Timestamp.
  3. Selectare (Select) randurile ramase.
Iata codul pt. un script de inregistrare utilizatori si vizitatori online intr-un tabel MySQL (denumit "userson").

1. - Mai intai se creaza tabelul "userson", cu 2 coloane (uvon, dt). In coloana "uvon" e adaugat numele utilizatorului (daca e autentificat /logat), sau IP-ul vizitatorului. In coloana "dt" e adaugat un numar cu timpul in format Timestamp (timpul Unix) cand accesarea e facuta.
- Adaugati urmatorul cod intr-un fisier php (de exemplu, cu numele "create_userson.php"):

Codul pt. create_userson.php

<?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();
?>

2. - Acum se creaza scriptul pt. comenzile Insert/Update, Delete, si Select date in tabelul "userson" (Explicatii despre cod sunt in comentariile din script).
- Adaugati codul de mai jos in alt fisier php (denmit "usersmysql.php"):

In ambele fisiere trebuie sa adaugati datele dv. pentru conectare la baza de date MySQL, in variabilele: $host, $user, $pass, $dbname .

Codul pt. usersmysql.php

<?php
// Script Utilizatori si vizitatori Online - 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:
    https://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
?>

3. - Dupa ce ati creat aceste doua fisiere php pe server, accesati in browser "create_userson.php" (de exemplu, http://localhost/create_userson.php) ca sa creati tabelul "userson".
4. - Includeti "usersmysql.php" in fisierul php in care doriti sa afisati numarul de utilizatori si vizitatori online.
<?php include('usersmysql.php'); ?>

5. Sau, daca fisierul e de tip ".html", adaugati acest cod:
<script type="text/javascript" src="usersmysql.php?uvon=showon"></script>

Exemple utilizare aceste doua scripturi

• Includere "usersontxt.php" in fisier PHP:
<?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>

• Includere "usersmysql.php" in fisier .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>

Ambele script-uri (cu stocarea datelor intr-un fisier pe server, sau intr-un tabel MySQL) vor afisa un rezultat ca acesta:

Online: 8

Vizitatori: 5
Utilizatori: 3
- MarPlo
- Marius
- Admin

Un Test simplu in fiecare zi

HTML
CSS
JavaScript
PHP-MySQL
Engleza
Spaniola
Ce atribut e folosit in tag-ul <a> pentru adresa link-ului?
src href rel
<a href="http://coursesweb.net/" title="CoursesWeb.net">CoursesWeb.net</a>
Ce proprietate CSS seteaza tipul fontului utilizat?
font-family text-decoration font-size
h2 {
  font-family:"Calibri", sans-serif;
}
Ce instructiune selecteaza toate tag-urile <div> cu class="cls"?
querySelector("div.cls") getElementsByTagName("div") querySelectorAll("div.cls")
var elm_list = document.querySelectorAll("div.cls");
var nr_elms = elm_list.length;       // numar elemente selectate
alert(nr_elms);
Indicati functia care returneaza suma valorilor dintr-un array.
array_sum() array_diff() array_shift()
$arr =[1, 2, 3, 4);
$arr_sum = array_sum($arr);
echo $arr_sum;       // 10
Indicati forma corecta a verbului "study" (a studia) la Trecutul Simplu in aceasta propozitie: "We (study) English."
studyed studys studied
We studied English.
- Noi am studiat engleza.
Indicati forma corecta a verbului "decir" (a spune) la Prezent in aceasta propozitie: "Yo (decir) siempre la verdad."
digas digo decir
Yo digo siempre la verdad.
- Eu spun mereu adevarul.
Inregistrare, Afisare numar vizitatori si utilizatori Online

Last accessed pages

  1. Blog si Cugetari Personale (19991)
  2. Metode magice __get, __set, __call, __toString (752)
  3. Curs si Tutoriale JavaScript (33917)
  4. Definire Variabile si Constante (2099)
  5. Curs si Tutoriale Ajax (20248)

Popular pages this month

  1. Cursuri si Tutoriale: Engleza, Spaniola, HTML, CSS, Php-Mysql, JavaScript, Ajax (7196)
  2. Curs HTML gratuit Tutoriale HTML5 (5888)
  3. Curs si Tutoriale JavaScript (4878)
  4. Curs PHP MySQL, Tutoriale si Scripturi PHP (4550)
  5. Curs CSS Online Tutoriale CSS3 (4459)