Advertisement
contatowellington

Untitled

May 4th, 2017
623
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.69 KB | None | 0 0
  1. <?php
  2. /**
  3. * Sistema de contador de visitantes online
  4. *
  5. * @author Thiago Belem <contato@thiagobelem.net>
  6. * @link http://thiagobelem.net/
  7. *
  8. * @version 1.0
  9. * @package VisitantesOnline
  10. */
  11.  
  12. // Configurações do Script
  13. // ==============================
  14. $_VO['registraAuto'] = true; // Registra os visitantes automaticamente?
  15. $_VO['conectaMySQL'] = true; // Abre uma conexão com o servidor MySQL?
  16.  
  17. $_VO['cookieTempo'] = 20; // Quantos minutos a visita dura
  18. $_VO['cookieNome'] = 'VisOnline'; // Nome do cookie usado para identificar o visitante
  19.  
  20. $_VO['servidor'] = ''; // Servidor MySQL
  21. $_VO['usuario'] = ''; // Usuário MySQL
  22. $_VO['senha'] = ''; // Senha MySQL
  23. $_VO['banco'] = ''; // Banco de dados MySQL
  24.  
  25. $_VO['tabela_v'] = 'visitas_online'; // Tabela onde os visitantes online serão salvos
  26. $_VO['tabela_r'] = 'visitas_record'; // Tabela onde os recordes de visitas serão salvos
  27. // ==============================
  28.  
  29. // ======================================
  30. // ~ Não edite a partir deste ponto ~
  31. // ======================================
  32.  
  33. // Verifica se precisa fazer a conexão com o MySQL
  34. if ($_VO['conectaMySQL'] == true) {
  35. $_VO['link'] = mysql_connect($_VO['servidor'], $_VO['usuario'], $_VO['senha']) or die("MySQL: Não foi possível conectar-se ao servidor [".$_VO['servidor']."].");
  36. mysql_select_db($_VO['banco'], $_VO['link']) or die("MySQL: Não foi possível conectar-se ao banco de dados [".$_VO['banco']."].");
  37. }
  38.  
  39. /**
  40. * Gera o identificador do visitante baseado no IP e na hora
  41. */
  42. function geraIdentificador() {
  43. global $_VO;
  44.  
  45. return sha1($_VO['cookieNome'].$_SERVER["REMOTE_ADDR"].microtime());
  46. }
  47.  
  48. /**
  49. * Registra uma visita e/ou pageview para o visitante
  50. * Esta funçaõ será chamada automaticamente dependendo de $_VO['registraAuto']
  51. */
  52. function registraVisita() {
  53. global $_VO;
  54.  
  55. // Verifica se os headers já foram enviados. Caso tenham, é gerada uma mensagem de erro
  56. if (headers_sent()) {
  57. trigger_error("[VisitantesOnline] Por favor, insira o arquivo antes de qualquer HTML", E_USER_ERROR);
  58. return false;
  59. }
  60.  
  61. // Verifica se é um visitante que já está no site (se o Cookie existe)
  62. if (isset($_COOKIE[$_VO['cookieNome']])) {
  63. $novo = false;
  64. $identificador = $_COOKIE[$_VO['cookieNome']];
  65. } else {
  66. $novo = true;
  67. $identificador = geraIdentificador();
  68. }
  69.  
  70. // Se o visitante não é novo, tenta atualizar o registro dele na tabela
  71. if (!$novo) {
  72. $query = "UPDATE `".$_VO['tabela_v']."` SET `hora` = NOW() WHERE `identificador` = '".$identificador."' LIMIT 1";
  73. $resultado = mysql_query($query);
  74. $atualizado = (bool)(mysql_affected_rows($resultado) == 1);
  75. }
  76.  
  77. // Se o visitante é novo OU se o registro dele ele não foi atualizado, insere um novo registro na tabela
  78. if ($novo OR !$atualizado) {
  79. $query = "INSERT INTO `".$_VO['tabela_v']."` VALUES (NULL, '".$_SERVER["REMOTE_ADDR"]."', '".$identificador."', NOW())";
  80. mysql_query($query);
  81. }
  82.  
  83. // Deleta todos os visitantes com mais de 20min no site, exceto o atual
  84. $query = "DELETE FROM `".$_VO['tabela_v']."` WHERE (`hora` <= (NOW() - INTERVAL ".$_VO['cookieTempo']." MINUTE)) AND `identificador` != '".$identificador."'";
  85. mysql_query($query);
  86.  
  87. // Verifica se é preciso atualizar o recorde de visitas
  88. $recorde = visitantesRecorde(); // Pega o recorde de visitantes
  89. $online = visitantesOnline(); // Pega o n° de visitantes atual
  90. if ($recorde[1] < $online) {
  91. $query = "REPLACE INTO `".$_VO['tabela_r']."` SET `data` = NOW(), `visitantes` = ".$online;
  92. mysql_query($query);
  93. }
  94.  
  95. // Atualiza o cookie com o identificador do visitante
  96. setcookie($_VO['cookieNome'], $identificador, time() + ($_VO['cookieTempo'] * 60), '');
  97. return true;
  98. }
  99.  
  100. /**
  101. * Função que retorna o total de visitantes online
  102. */
  103. function visitantesOnline() {
  104. global $_VO;
  105.  
  106. // Faz a consulta no MySQL em função dos argumentos
  107. $sql = "SELECT COUNT(*) FROM `".$_VO['tabela_v']."`";
  108. $query = mysql_query($sql);
  109. $resultado = mysql_fetch_row($query);
  110.  
  111. // Retorna o valor encontrado ou zero
  112. return (!empty($resultado)) ? (int)$resultado[0] : 0;
  113. }
  114.  
  115. /**
  116. * Função que retorna a data e o recorde de visitantes online
  117. */
  118. function visitantesRecorde($formato = 'd/m/Y') {
  119. global $_VO;
  120.  
  121. // Faz a consulta no MySQL em função dos argumentos
  122. $sql = "SELECT `data`, `visitantes` FROM `".$_VO['tabela_r']."` LIMIT 1";
  123. $query = mysql_query($sql);
  124. $resultado = mysql_fetch_row($query);
  125.  
  126. // Retorna o valor encontrado ou zero
  127. return (!empty($resultado)) ? array(date($formato, strtotime($resultado[1])), (int)$resultado[1]) : array(date($formato), 0);
  128. }
  129.  
  130. if ($_VO['registraAuto'] == true) { registraVisita(); }
  131. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement