Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment compter les visiteurs uniques sur mon site ?

Voici un tutoriel sympa, c'est ce qu'il vous faut.(Source : coursesweb.net/php-mysql )

Enregistrer et afficher les utilisateurs et visiteurs en ligne

Compter les utilisateurs et visiteurs en ligne à l'aide d'une table MySQL

Dans ce didacticiel, vous apprendrez à vous inscrire, à compter et à afficher dans votre page Web le nombre d'utilisateurs et de visiteurs en ligne. Le principe est le suivant :chaque utilisateur / visiteur est enregistré dans un fichier texte ou une base de données. Chaque fois qu'une page du site Web est consultée, le script php supprime tous les enregistrements antérieurs à un certain temps (par exemple 2 minutes), ajoute l'utilisateur/visiteur actuel et prend le nombre d'enregistrements restant à afficher.

Vous pouvez stocker les utilisateurs et visiteurs en ligne dans un fichier sur le serveur ou dans une table MySQL. Dans ce cas, je pense que l'utilisation d'un fichier texte pour ajouter et lire les enregistrements est plus rapide que de les stocker dans une table MySQL, ce qui nécessite plus de demandes.

On présente d'abord la méthode avec enregistrement dans un fichier texte sur le serveur, puis la méthode avec table MySQL.

Pour télécharger les fichiers avec les scripts présentés dans ce tutoriel, cliquez sur -> Compter en ligne Utilisateurs et visiteurs .

• Les deux scripts peuvent être inclus dans les fichiers ".php" (avec include() ) , ou dans " .html" fichiers (avec <script> ) , comme vous pouvez le voir dans les exemples présentés au bas de cette page ; mais le serveur doit exécuter PHP.

Stocker les utilisateurs et visiteurs en ligne dans un fichier texte

Pour ajouter des enregistrements dans un fichier sur le serveur avec PHP, vous devez définir les autorisations CHMOD 0766 (ou CHMOD 0777) sur ce fichier, afin que PHP puisse y écrire des données.

  1. Créez un fichier texte sur votre serveur (par exemple, nommé userson.txt ) et donnez-lui CHMOD 0777 autorisations (dans votre application FTP, faites un clic droit sur ce fichier, choisissez Propriétés, puis sélectionnez Read , Write , et Execute options).
  2. Créez un fichier PHP (nommé usersontxt.php ) ayant le code ci-dessous, puis copiez ce fichier php dans le même répertoire que userson.txt .

Le code pour usersontxt.php ;

<?php
// Script Online Users and Visitors - http://coursesweb.net/php-mysql/
if(!isset($_SESSION)) session_start();        // start Session, if not already started

$filetxt = 'userson.txt';  // the file in which the online users /visitors are stored
$timeon = 120;             // number of secconds to keep a user online
$sep = '^^';               // characters used to separate the user name and date-time
$vst_id = '-vst-';        // an identifier to know that it is a visitor, not logged user

/*
 If you have an user registration script,
 replace $_SESSION['nume'] with the variable in which the user name is stored.
 You can get a free registration script from:  http://coursesweb.net/php-mysql/register-login-script-users-online_s2
*/

// get the user name if it is logged, or the visitors IP (and add the identifier)

    $uvon = isset($_SESSION['nume']) ? $_SESSION['nume'] : $_SERVER['SERVER_ADDR']. $vst_id;

$rgxvst = '/^([0-9\.]*)'. $vst_id. '/i';         // regexp to recognize the line with visitors
$nrvst = 0;                                       // to store the number of visitors

// sets the row with the current user /visitor that must be added in $filetxt (and current timestamp)

    $addrow[] = $uvon. $sep. time();

// check if the file from $filetxt exists and is writable

    if(is_writable($filetxt)) {
      // get into an array the lines added in $filetxt
      $ar_rows = file($filetxt, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
      $nrrows = count($ar_rows);

            // number of rows

  // if there is at least one line, parse the $ar_rows array

      if($nrrows>0) {
        for($i=0; $i<$nrrows; $i++) {
          // get each line and separate the user /visitor and the timestamp
          $ar_line = explode($sep, $ar_rows[$i]);
      // add in $addrow array the records in last $timeon seconds
          if($ar_line[0]!=$uvon && (intval($ar_line[1])+$timeon)>=time()) {
            $addrow[] = $ar_rows[$i];
          }
        }
      }
    }

$nruvon = count($addrow);                   // total online
$usron = '';                                    // to store the name of logged users
// traverse $addrow to get the number of visitors and users
for($i=0; $i<$nruvon; $i++) {
 if(preg_match($rgxvst, $addrow[$i])) $nrvst++;       // increment the visitors
 else {
   // gets and stores the user's name
   $ar_usron = explode($sep, $addrow[$i]);
   $usron .= '<br/> - <i>'. $ar_usron[0]. '</i>';
 }
}
$nrusr = $nruvon - $nrvst;              // gets the users (total - visitors)

// the HTML code with data to be displayed
$reout = '<div id="uvon"><h4>Online: '. $nruvon. '</h4>Visitors: '. $nrvst. '<br/>Users: '. $nrusr. $usron. '</div>';

// write data in $filetxt
if(!file_put_contents($filetxt, implode("\n", $addrow))) $reout = 'Error: Recording file not exists, or is not writable';

// if access from <script>, with GET 'uvon=showon', adds the string to return into a JS statement
// in this way the script can also be included in .html files
if(isset($_GET['uvon']) && $_GET['uvon']=='showon') $reout = "document.write('$reout');";

echo $reout;             // output /display the result
?>
  1. Si vous souhaitez inclure le script ci-dessus dans un fichier ".php", ajoutez le code suivant à l'endroit où vous souhaitez afficher le nombre d'utilisateurs et de visiteurs en ligne :

4.Pour afficher le nombre de visiteurs/utilisateurs en ligne dans un fichier ".html", utilisez ce code :

<script type="text/javascript" src="usersontxt.php?uvon=showon"></script>

Ce script (et l'autre présenté ci-dessous) fonctionne avec $_SESSION. Au début du fichier PHP dans lequel vous l'utilisez, vous devez ajouter :session_start();.Compter les utilisateurs et visiteurs en ligne utilisant une table MySQL

Pour enregistrer, compter et afficher le nombre de visiteurs et d'utilisateurs en ligne dans une table MySQL, il faut effectuer trois requêtes SQL :Supprimer les enregistrements antérieurs à un certain temps. Insérer une ligne avec le nouvel utilisateur/visiteur, ou, s'il est déjà inséré, Mettez à jour l'horodatage dans sa colonne.Sélectionnez les lignes restantes.Voici le code d'un script qui utilise une table MySQL (nommée "userson") pour stocker et afficher les utilisateurs et visiteurs en ligne.

  1. Nous créons d'abord la table "userson", avec 2 colonnes (uvon, dt). Dans la colonne "uvon" est stocké le nom de l'utilisateur (si connecté) ou l'IP du visiteur. Dans la colonne "dt" est stocké un nombre avec l'horodatage (heure Unix) lors de l'accès à la page.
  • Ajoutez le code suivant dans un fichier php (par exemple, nommé "create_userson.php") :

Le code pour create_userson.php :

<?php
header('Content-type: text/html; charset=utf-8');

// HERE add your data for connecting to MySQ database
$host = 'localhost';           // MySQL server address
$user = 'root';                // User name
$pass = 'password';            // User`s password
$dbname = 'database';          // Database name

// connect to the MySQL server
$conn = new mysqli($host, $user, $pass, $dbname);

// check connection
if (mysqli_connect_errno()) exit('Connect failed: '. mysqli_connect_error());

// sql query for CREATE "userson" TABLE
$sql = "CREATE TABLE `userson` (
 `uvon` VARCHAR(32) PRIMARY KEY,
 `dt` INT(10) UNSIGNED NOT NULL
 ) CHARACTER SET utf8 COLLATE utf8_general_ci"; 

// Performs the $sql query on the server to create the table
if ($conn->query($sql) === TRUE) echo 'Table "userson" successfully created';
else echo 'Error: '. $conn->error;

$conn->close();
?>
  1. Nous créons maintenant le script qui insère, supprime et sélectionne les données dans userson table (Pour des explications sur le code, voir les commentaires dans le script).
  • Ajoutez le code ci-dessous dans un autre fichier php (nommé usersmysql.php ):Dans les deux fichiers, vous devez ajouter vos données personnelles pour vous connecter à la base de données MySQL, dans les variables :$host , $user , $pass , et $dbname .

Le code pour usersmysql.php :

<?php
// Script Online Users and Visitors - coursesweb.net/php-mysql/
if(!isset($_SESSION)) session_start();         // start Session, if not already started

// HERE add your data for connecting to MySQ database
$host = 'localhost';           // MySQL server address
$user = 'root';                // User name
$pass = 'password';            // User`s password
$dbname = 'database';          // Database name

/*
 If you have an user registration script,
 replace $_SESSION['nume'] with the variable in which the user name is stored.
 You can get a free registration script from:  http://coursesweb.net/php-mysql/register-login-script-users-online_s2
*/

// get the user name if it is logged, or the visitors IP (and add the identifier)
$vst_id = '-vst-';         // an identifier to know that it is a visitor, not logged user
$uvon = isset($_SESSION['nume']) ? $_SESSION['nume'] : $_SERVER['SERVER_ADDR']. $vst_id;

$rgxvst = '/^([0-9\.]*)'. $vst_id. '/i';         // regexp to recognize the rows with visitors
$dt = time();                                    // current timestamp
$timeon = 120;             // number of secconds to keep a user online
$nrvst = 0;                                     // to store the number of visitors
$nrusr = 0;                                     // to store the number of usersrs
$usron = '';                                    // to store the name of logged users

// connect to the MySQL server
$conn = new mysqli($host, $user, $pass, $dbname);

// Define and execute the Delete, Insert/Update, and Select queries
$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`";

// Execute each query
if(!$conn->query($sqldel)) echo 'Error: '. $conn->error;
if(!$conn->query($sqliu)) echo 'Error: '. $conn->error;
$result = $conn->query($sqlsel);

// if the $result contains at least one row
if ($result->num_rows > 0) {
  // traverse the sets of results and set the number of online visitors and users ($nrvst, $nrusr)
  while($row = $result->fetch_assoc()) {
    if(preg_match($rgxvst, $row['uvon'])) $nrvst++;       // increment the visitors
    else {
      $nrusr++;                   // increment the users
      $usron .= '<br/> - <i>'.$row['uvon']. '</i>';          // stores the user's name
    }
  }
}

$conn->close();                  // close the MySQL connection

// the HTML code with data to be displayed
$reout = '<div id="uvon"><h4>Online: '. ($nrusr+$nrvst). '</h4>Visitors: '. $nrvst. '<br/>Users: '. $nrusr. $usron. '</div>';

// if access from <script>, with GET 'uvon=showon', adds the string to return into a JS statement
// in this way the script can also be included in .html files
if(isset($_GET['uvon']) && $_GET['uvon']=='showon') $reout = "document.write('$reout');";

echo $reout;             // output /display the result
?>
  1. Après avoir créé ces deux fichiers php sur votre serveur, exécutez le "create_userson.php" sur votre navigateur pour créer la table "userson".

  2. Inclure le usersmysql.php fichier dans le fichier php dans lequel vous souhaitez afficher le nombre d'utilisateurs et de visiteurs en ligne.

  3. Ou, si vous souhaitez l'insérer dans un fichier ".html", ajoutez ce code :

Exemples d'utilisation de ces scripts

• Inclure le "usersontxt.php` dans un fichier php :

Compter les utilisateurs et visiteurs en ligne

• Inclure le "usersmysql.php" dans un fichier html :

<!doctype html>
<html>
<head>
 <meta charset="utf-8" />
 <title>Counter Online Users and Visitors</title>
 <meta name="description" content="PHP script to count and show the number of online users and visitors" />
 <meta name="keywords" content="online users, online visitors" />
</head>
<body>

<!-- Includes the script ("usersontxt.php", or "usersmysql.php") -->
<script type="text/javascript" src="usersmysql.php?uvon=showon"></script>

</body>
</html>

Les deux scripts (avec stockage des données dans un fichier texte sur le serveur ou dans une table MySQL) afficheront un résultat comme celui-ci :En ligne :5

Visiteurs :3Utilisateurs :2

  • MarPlo
  • Marius