velocidad tutorial sistemas recopila que puede podrías los informes google funciona datos cómo curso completo como aumentar analytic analitica php mysql counting visitor-statistic

php - sistemas - tutorial analitica web



¿Cómo cuento visitantes únicos a mi sitio? (5)

Estoy haciendo un sistema de conteo de visitantes para que las publicaciones de los usuarios muestren las publicaciones más vistas en la página de inicio. Tengo un sistema de conteo de visitantes ahora, pero todo registra una vista en cada actualización de página. No puedo usar Google Analytics.

Lo que necesito es un contador de visitantes que solo cuente con los visitantes únicos. En mi caso, único significa que una persona solo puede ver una publicación en un día. Incluso una semana podría funcionar, creo. ¿Puedes escribir ese código php aquí? Puedes darme un enlace a algunos buenos tutoriales si quieres también.

Esto es lo que el código debe hacer (o equivalente):

  1. Una vez que se carga la página, verifique si el visitante es nuevo o viejo (no tengo idea de cómo hacerlo ...)
  2. Si es viejo, ignóralo.
  3. Si es nuevo, en mysql, views = views + 1

He editado el código de "Mejor respuesta", aunque encontré una cosa útil que faltaba. Esto también hará un seguimiento de la IP de un usuario si está utilizando un Proxy o simplemente si el servidor tiene nginx instalado como un inversor de proxy.

Agregué este código a su script en la parte superior de la función:

function getRealIpAddr() { if (!empty($_SERVER[''HTTP_CLIENT_IP''])) //check ip from share internet { $ip=$_SERVER[''HTTP_CLIENT_IP'']; } elseif (!empty($_SERVER[''HTTP_X_FORWARDED_FOR''])) //to check ip is pass from proxy { $ip=$_SERVER[''HTTP_X_FORWARDED_FOR'']; } else { $ip=$_SERVER[''REMOTE_ADDR'']; } return $ip; } $adresseip = getRealIpAddr();

Después de eso edité su código.

Encuentra la línea que dice lo siguiente:

// 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;

y reemplazarlo con esto:

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

Esto funcionará.

Aquí está el código completo si algo sucede:

<?php function getRealIpAddr() { if (!empty($_SERVER[''HTTP_CLIENT_IP''])) //check ip from share internet { $ip=$_SERVER[''HTTP_CLIENT_IP'']; } elseif (!empty($_SERVER[''HTTP_X_FORWARDED_FOR''])) //to check ip is pass from proxy { $ip=$_SERVER[''HTTP_X_FORWARDED_FOR'']; } else { $ip=$_SERVER[''REMOTE_ADDR'']; } return $ip; } $adresseip = getRealIpAddr(); // 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

Todavía no he probado esto en el script Sql.


Las vistas únicas son siempre una tuerca difícil de romper. La verificación de la IP podría funcionar, pero una IP puede ser compartida por más de un usuario. Una cookie podría ser una opción viable, pero una cookie puede caducar o ser modificada por el cliente.

En su caso, no parece ser un gran problema si la cookie se modifica, por lo que recomendaría usar una cookie en un caso como este. Cuando la página esté cargada, verifique si hay una cookie, si no la hay, cree una y agregue un +1 a las vistas. Si está configurado, no hagas el +1.

Establezca la fecha de vencimiento de las cookies como desee, semana o día, si así lo desea, y expirará después de esa hora. Después de la expiración, será un usuario único otra vez!

Editar:
Pensé que podría ser una buena idea agregar este aviso aquí ...
Desde finales de 2016, una dirección IP (estática o dinámica) se considera información personal en la UE.
Eso significa que solo se le permite almacenar una dirección IP con una buena razón (y no estoy seguro de que el seguimiento de las vistas sea una buena razón). Por lo tanto, si pretende almacenar la dirección IP de los visitantes, le recomendaría hacer un hash o cifrarlo con un algoritmo que no se pueda revertir, para asegurarse de que no está infringiendo ninguna ley (especialmente después de que se hayan implementado las leyes GDPR).


Para descubrir que el usuario es nuevo o viejo, obtenga la IP del usuario.

crear una tabla para IPs y su marca de tiempo de visitas.

verifique si la IP no existe O la hora () - saved_timestamp> 60 * 60 * 24 (por 1 día), edite la marca de hora de la IP a time() (significa ahora) y aumente su vista.

de lo contrario, no hacer nada.

FYI : la IP del usuario se almacena en la variable $_SERVER[''REMOTE_ADDR'']


http://coursesweb.net/php-mysql/register-show-online-users-visitors_t

Aquí hay un buen tutorial, es lo que necesitas.

Regístrese y muestre usuarios y visitantes en línea.

Cuente usuarios y visitantes en línea usando 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 se registra 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 el número de registros que quedan para 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, lo que requiere más solicitudes.

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

Para descargar los archivos con los scripts presentados en este tutorial, haga clic en -> Contar usuarios y visitantes en línea.

• Ambos scripts se pueden incluir en los archivos " .php" (con include ()), o en los archivos " .html" (con), como puede ver en los ejemplos presentados al final de esta página; pero el servidor debe ejecutar PHP. Almacenar 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, para que PHP pueda escribir datos en él.

1-Cree un archivo de texto en su servidor (por ejemplo, llamado "userson.txt") y asígnele los permisos CHMOD 0777 (en su aplicación FTP, haga clic con el botón derecho en ese archivo, elija Propiedades, luego seleccione Leer, Escribir y Ejecutar ). 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 ?>

3-Si desea incluir la secuencia de comandos anterior en un archivo ".php", agregue el siguiente código en el lugar donde desea mostrar el número 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 presentado a continuación) funciona con $ _SESSION. Al comienzo del archivo PHP en el que lo usa, debe agregar: session_start () ;. Contar usuarios y visitantes en línea usando una tabla MySQL

Para registrarse, contar y mostrar el número de visitantes y usuarios en línea en una tabla de MySQL, debe realizar tres consultas SQL: Eliminar los registros anteriores a un tiempo determinado. Inserte una fila con el nuevo usuario / visitante o, si ya 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á conectado) o la IP del visitante. En la columna "dt" se almacena un número con la marca de tiempo (hora de 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(); ?> 2. - Now we create the script that Inserts, Deletes, and Selects data in the "userson" table (For explanations about the code, see the comments in script). - Add the code below in another php file (named "usersmysql.php"): In both file you must add your personal data for connecting to MySQL database, in the variables: $host, $user, $pass, and $dbname . The code for 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. Una vez que haya creado estos dos archivos php en su servidor, ejecute "create_userson.php" en su navegador para crear la tabla "userson".
  2. Incluya el archivo "usersmysql.php" en el archivo php en el que desea mostrar el número de usuarios y visitantes en línea.
  1. O, si desea insertarlo en un archivo ".html", agregue este código:

Ejemplos usando estos scripts

• Incluyendo el "usersontxt.php" en un archivo php:

Contador de usuarios y visitantes en línea

• Incluyendo "usersmysql.php" en un archivo html: Contador de usuarios y visitantes en línea

Ambos scripts (con el 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: 3 Usuarios: 2 - MarPlo - Marius


$user_ip=$_SERVER[''REMOTE_ADDR'']; $check_ip = mysql_query("select userip from pageview where page=''yourpage'' and userip=''$user_ip''"); if(mysql_num_rows($check_ip)>=1) { } else { $insertview = mysql_query("insert into pageview values('''',''yourpage'',''$user_ip'')"); $updateview = mysql_query("update totalview set totalvisit = totalvisit+1 where page=''yourpage'' "); }

código del tutorial oficial de talkerscode si tiene algún problema http://talkerscode.com/webtricks/create-a-simple-pageviews-counter-using-php-and-mysql.php