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
Care tag defineste zona de click intr-o harta creata dintr-o imagine?
<map> <img> <area>
<img src="image.jpg" usemap="#map1">
<map name="map1">
  <area shape="rect" coords="9, 120, 56, 149" href="#">
  <area shape="rect" coords="100, 200, 156, 249" href="#">
</map>
Ce proprietate CSS indica ce sa se intample cand continutul unui element depaseste dimensiunile lui?
display overflow position
#id {
  overflow: auto;
}
Clic pe evenimentul care este declansat cand mouse-ul e deasupra unui obiect.
onclick onmouseover onmouseout
document.getElementById("id").onmouseover = function(){
  document.write("Sa ai Viata Buna");
}
Indicati variabila PHP ce contine datele adaugate in adresa URL, dupa caracterul "?".
$_SESSION $_GET $_POST
if(isset($_GET["id"])) {
  echo $_GET["id"];
}
Clic pe pronumele reflexiv care e potrivit in propozitia: "Marc is the boy ... won the prize".
who which whoever
Marc is the boy who won the prize.
- Marc e baiatul care a castigat premiul.
Clic pe pronumele reflexiv care e potrivit in propozitia: "Voy a ver al pintor de ... les hablé ayer".
que quien cuyo
Voy a ver al pintor de quien les hablé ayer.
- Ma duc sa vad pictorul despre care ti-am vorbit ieri.
Inregistrare, Afisare numar vizitatori si utilizatori Online

Last accessed pages

  1. Conditional IF in Limba Engleza - Fraze Conditionale (40187)
  2. Verbe modale - SHALL, SHOULD, OUGHT TO, WILL, WOULD, USED TO, BE TO, DARE (14497)
  3. Prezentul continuu - Exercitii si teste incepatori (10539)
  4. Creare aceeasi inaltime la elemente HTML (57)
  5. Utilizare EventSource pentru evenimente de la server (256)

Popular pages this month

  1. Prezentul simplu si continuu - Present Tense Simple and Continuous (3706)
  2. Cursuri si Tutoriale: Engleza, Spaniola, HTML, CSS, Php-Mysql, JavaScript, Ajax (3277)
  3. Gramatica limbii engleze - Prezentare Generala (2797)
  4. Prezent perfect si Prezent perfect continuu - Present perfect and Continuous (2397)
  5. Trecutul simplu si continuu - Past Tense Simple and Continuous (2005)