Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como faço para contar os visitantes únicos do meu site?


Aqui está um bom tutorial, é o que você precisa.(Fonte: cursosweb.net/php-mysql )

Registrar e mostrar usuários e visitantes on-line

Contar usuários e visitantes on-line usando uma tabela MySQL


Neste tutorial você pode aprender como registrar, contar e exibir em sua página o número de usuários e visitantes online. O princípio é este:cada usuário/visitante é cadastrado em um arquivo de texto ou banco de dados. Toda vez que uma página do site é acessada, o script php exclui todos os registros anteriores a um determinado tempo (por exemplo, 2 minutos), adiciona o usuário/visitante atual e leva o número de registros restantes para exibição.

Você pode armazenar os usuários e visitantes online em um arquivo no servidor ou em uma tabela MySQL. Nesse caso, acho que usar um arquivo de texto para adicionar e ler os registros é mais rápido do que armazená-los em uma tabela MySQL, que requer mais pedidos.

Primeiramente é apresentado o método com gravação em arquivo texto no servidor, depois o método com tabela MySQL.

Para baixar os arquivos com os scripts apresentados neste tutorial, clique em -> Count Online Usuários e Visitantes .

• Ambos os scripts podem ser incluídos em arquivos ".php" (com include() ) , ou em " .html" arquivos (com <script> ) , como você pode ver nos exemplos apresentados na parte inferior desta página; mas o servidor deve executar o PHP.

Armazenando usuários e visitantes on-line em um arquivo de texto


Para adicionar registros em um arquivo no servidor com PHP você deve definir as permissões CHMOD 0766 (ou CHMOD 0777) para esse arquivo, para que o PHP possa gravar dados nele.
  1. Crie um arquivo de texto em seu servidor (por exemplo, chamado userson.txt ) e dê CHMOD 0777 permissões (no seu aplicativo FTP, clique com o botão direito do mouse nesse arquivo, escolha Propriedades e selecione Read , Write e Execute opções).
  2. Crie um arquivo PHP (chamado usersontxt.php ) com o código abaixo, copie este arquivo php no mesmo diretório que userson.txt .

O 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. Se você quiser incluir o script acima em um arquivo ".php", adicione o seguinte código no local em que deseja mostrar o número de usuários e visitantes online:

4.Para mostrar o número de visitantes/usuários online em um arquivo ".html", use este código:
<script type="text/javascript" src="usersontxt.php?uvon=showon"></script>

Este script (e o outro apresentado abaixo) funciona com $_SESSION. No início do arquivo PHP em que você o utiliza, você deve adicionar:session_start();.Contar usuários e visitantes online usando uma tabela MySQL

Para registrar, contar e mostrar o número de visitantes e usuários online em uma tabela MySQL, é necessário realizar três consultas SQL:Apagar os registros mais antigos que um determinado tempo. Inserir uma linha com o novo usuário/visitante, ou, se já estiver inserido, Atualize o timestamp em sua coluna.Selecione as linhas restantes.Aqui está o código para um script que usa uma tabela MySQL (chamada "userson") para armazenar e exibir os Usuários e Visitantes Online.
  1. Primeiro criamos a tabela "userson", com 2 colunas (uvon, dt). Na coluna "uvon" é armazenado o nome do usuário (se logado) ou o IP do visitante. Na coluna "dt" é armazenado um número com o timestamp (hora Unix) quando a página é acessada.
  • Adicione o seguinte código em um arquivo php (por exemplo, chamado "create_userson.php"):

O 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. Agora criamos o script que insere, exclui e seleciona dados no userson table (Para explicações sobre o código, veja os comentários no script).
  • Adicione o código abaixo em outro arquivo php (chamado usersmysql.php ):Em ambos os arquivos você deve adicionar seus dados pessoais para conectar ao banco de dados MySQL, nas variáveis:$host , $user , $pass e $dbname .

O 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. Depois de ter criado esses dois arquivos php em seu servidor, execute o "create_userson.php" em seu navegador para criar a tabela "userson".

  2. Inclua o usersmysql.php no arquivo php no qual você deseja exibir o número de usuários e visitantes online.

  3. Ou, se quiser inseri-lo em um arquivo ".html", adicione este código:

Exemplos usando esses scripts

• Incluindo o "usersontxt.php` em um arquivo php:


Contador de usuários e visitantes online
• Incluindo o "usersmysql.php" em um arquivo 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 os scripts (com armazenamento de dados em um arquivo de texto no servidor ou em uma tabela MySQL) exibirão um resultado como este:Online:5

Visitantes:3Usuários:2
  • MarPlo
  • Mário