sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo cuento a los visitantes únicos de mi sitio?

Aquí hay un buen tutorial, es lo que necesita. (Fuente: cursosweb.net/php-mysql )

Registrar y mostrar usuarios y visitantes en línea

Contar usuarios y visitantes en línea utilizando una tabla MySQL

En este tutorial, puede aprender cómo registrarse, contar y mostrar en su página web el número de usuarios y visitantes en línea. El principio es este:cada usuario/visitante está registrado en un archivo de texto o base de datos. Cada vez que se accede a una página del sitio web, el script php elimina todos los registros anteriores a un tiempo determinado (por ejemplo, 2 minutos), agrega el usuario/visitante actual y toma la cantidad de registros que quedan por mostrar.

Puede almacenar los usuarios y visitantes en línea en un archivo en el servidor o en una tabla MySQL. En este caso, creo que usar un archivo de texto para agregar y leer los registros es más rápido que almacenarlos en una tabla MySQL, que requiere más solicitudes.

Primero se presenta el método con grabación en un archivo de texto en el servidor, luego el método con tabla MySQL.

Para descargar los archivos con los scripts presentados en este tutorial, haga clic en -> Count Online Usuarios y Visitantes .

• Ambos scripts se pueden incluir en archivos ".php" (con include() ) , o en " .html" archivos (con <script> ) , como puede ver en los ejemplos presentados al final de esta página; pero el servidor debe ejecutar PHP.

Almacenamiento de usuarios y visitantes en línea en un archivo de texto

Para agregar registros en un archivo en el servidor con PHP, debe configurar los permisos CHMOD 0766 (o CHMOD 0777) para ese archivo, de modo que PHP pueda escribir datos en él.

  1. Cree un archivo de texto en su servidor (por ejemplo, llamado userson.txt ) y dale CHMOD 0777 permisos (en su aplicación FTP, haga clic derecho en ese archivo, elija Propiedades, luego seleccione Read , Write y Execute opciones).
  2. Cree un archivo PHP (llamado usersontxt.php ) con el código a continuación, luego copie este archivo php en el mismo directorio que userson.txt .

El código para 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 desea incluir el script anterior en un archivo ".php", agregue el siguiente código en el lugar donde desea mostrar la cantidad de usuarios y visitantes en línea:

4. Para mostrar el número de visitantes/usuarios en línea en un archivo ".html", use este código:

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

Este script (y el otro que se presenta a continuación) funciona con $_SESSION. Al comienzo del archivo PHP en el que lo use, debe agregar:session_start();.Contar usuarios y visitantes en línea usando una tabla MySQL

Para registrar, contar y mostrar el número de visitantes y usuarios en línea en una tabla MySQL, se requiere realizar tres consultas SQL:Eliminar los registros anteriores a un tiempo determinado. Insertar una fila con el nuevo usuario/visitante, o, si ya lo está insertado, actualice la marca de tiempo en su columna. Seleccione las filas restantes. Aquí está el código para un script que usa una tabla MySQL (llamada "userson") para almacenar y mostrar los usuarios y visitantes en línea.

  1. Primero creamos la tabla "userson", con 2 columnas (uvon, dt). En la columna "uvon" se almacena el nombre del usuario (si está registrado) o la IP del visitante. En la columna "dt" se almacena un número con la marca de tiempo (hora Unix) cuando se accede a la página.
  • Agregue el siguiente código en un archivo php (por ejemplo, llamado "create_userson.php"):

El código para 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. Ahora creamos el script que inserta, elimina y selecciona datos en el userson tabla (Para obtener explicaciones sobre el código, consulte los comentarios en el script).
  • Agregue el siguiente código en otro archivo php (llamado usersmysql.php ):En ambos archivos debes agregar tus datos personales para conectarte a la base de datos MySQL, en las variables:$host , $user , $pass y $dbname .

El código para 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. Después de haber creado estos dos archivos php en su servidor, ejecute "create_userson.php" en su navegador para crear la tabla "userson".

  2. Incluya el usersmysql.php archivo en el archivo php en el que desea mostrar la cantidad de usuarios y visitantes en línea.

  3. O, si desea insertarlo en un archivo ".html", agregue este código:

Ejemplos usando estos scripts

• Incluir el "usersontxt.php` en un archivo php:

Contador de usuarios y visitantes en línea

• Incluir "usersmysql.php" en un archivo 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>

Ambos scripts (con almacenamiento de datos en un archivo de texto en el servidor o en una tabla MySQL) mostrarán un resultado como este:En línea:5

Visitantes:3Usuarios:2

  • MarPlo
  • Mario