Sitios web

Un sencillo contador para tu web – Scripts en PHP

En este segundo capítulo vamos a mostrar los códigos de los dos scripts en PHP que gestionan el contador. El primero se ocupa de recoger los datos de acceso a la base de datos que contiene las tres tablas que sirven para almacenar la información necesaria para el perfecto funcionamiento del contador. El segundo recoge los accesos de los visitantes y las páginas vistas y guarda todo en la base de datos.

Acceso a la base de datos

Llamaremos inc_counter.php al archivo que contiene toda la información necesaria para acceder a la base de datos que alberga las tres tablas necesarias para el funcionamiento del contador. Podemos crear una carpeta o directorio llamado contador en el que incluiremos este archivo.

<?php
$server = 'nombre_servidor';
$user = 'nombre_usuario';
$pass = 'contraseña_usuario';
$db2 = 'nombre_base_datos';
?>

Archivo destinado a recabar datos

<?php
/** Inclusión del archivo de acceso a la base de datos **/

include ("inc_counter.php");

/** Detección de robots. Devuelve el nombre del robot o, si no lo es, devuelve false **/

function crawlerDetect($USER_AGENT) {
$crawlers = array(
array('Google', 'Google'),
array('msnbot', 'MSN'),
array('Rambler', 'Rambler'),
array('Yahoo', 'Yahoo'),
array('AbachoBOT', 'AbachoBOT'),
array('accoona', 'Accoona'),
array('AcoiRobot', 'AcoiRobot'),
array('ASPSeek', 'ASPSeek'),
array('CrocCrawler', 'CrocCrawler'),
array('Dumbot', 'Dumbot'),
array('FAST-WebCrawler', 'FAST-WebCrawler'),
array('GeonaBot', 'GeonaBot'),
array('Gigabot', 'Gigabot'),
array('Lycos', 'Lycos spider'),
array('MSRBOT', 'MSRBOT'),
array('Scooter', 'Altavista robot'),
array('AltaVista', 'Altavista robot'),
array('IDBot', 'ID-Search Bot'),
array('eStyle', 'eStyle Bot'),
array('Scrubby', 'Scrubby robot')
);

foreach ($crawlers as $c) {
if (stristr($USER_AGENT, $c[0])) {
return($c[1]);
}
}

return false;
}

/** Acceso a la base de datos **/

$db = mysqli_connect("$server", "$user", "$pass") or die("No hay conexión.");
if(!$db)
die("no db");
if(!mysqli_select_db("$db2",$db))
die("No se seleccionó la base de datos.");

/** Lectura y detección de fecha y hora así como de la IP del visitante **/

$server_time=date("U");
$client_ip=$_SERVER['REMOTE_ADDR'];
$arr = getdate();
$dia_actual = $arr["mday"];
$hora_actual = $arr["hours"];
$minuto_actual = $arr["minutes"];
$crawler = crawlerDetect($_SERVER['HTTP_USER_AGENT']);
$visitorType &nbsp;&nbsp; &nbsp;= '';
if ($crawler){
$visitorType = 'bot';
}

/** Lectura y actualización de datos en la tabla visitas **/

$visita = mysqli_query("SELECT * FROM visitas");
while($row = mysqli_fetch_array($visita)) {
extract($row);
$dia = $row["dia"];
$totales = $row["totales"];
$hoy = $row["hoy"];
$vistotales = $row["vistotales"];
$vishoy = $row["vishoy"];
if ($dia_actual != $dia) {
$hoy = 1;
$vishoy = 1;
}else{
$hoy++;
}
$totales++;
}
if ($visitorType =='') {
$actualiza="UPDATE visitas SET dia='$dia_actual', totales='$totales', hoy='$hoy', vishoy='$vishoy'";
mysqli_query($actualiza);
}

/** Lectura y actualización de datos en la tabla current_users (usuarios online) **/

$p4 = mysqli_query("SELECT * FROM current_users WHERE ip='$client_ip'");
$pa4 = mysqli_fetch_array($p4);
if($pa4) {
$update="UPDATE current_users set time='$server_time' where ip='$pa4[ip]'";
mysqli_query($update) or die("No es posible actualizar: " . mysqli_error());
} else {
$query=("INSERT INTO `current_users` (`ip`, `time`, `visitorType`) VALUES ('$client_ip', '$server_time', '$visitorType')");
$result = mysqli_query($query) or die("No se puede insertar: " . mysqli_error());
$vishoy++;
$vistotales++;
if ($visitorType =='') {
$actualiza1="UPDATE visitas SET vistotales='$vistotales', vishoy='$vishoy'";
mysqli_query($actualiza1);
}
}
$queryA = mysqli_query("SELECT ip FROM current_users WHERE visitorType = 'bot'");
$num_bot = mysqli_num_rows($queryA);

$result6 = mysqli_query("SELECT ip FROM current_users" );
$current_visitors = mysqli_num_rows($result6);
$num_no_bot = $current_visitors - $num_bot;

/** Lectura y actualización de la tabla max_users (máximo número de usuarios) **/

$max_user = mysqli_query("SELECT * FROM max_users");
while($row = mysqli_fetch_array($max_user)) {
extract($row);
$total = $row["total"];

if ($total < $num_no_bot) {
$total = $num_no_bot;
$actualiza2="UPDATE max_users SET total='$total', hora='$server_time'";
mysqli_query($actualiza2);
}
}

/** Gestión del tiempo que controla la vigencia de los usuarios online. Por defecto 3 minutos **/

$time2=$server_time-180;
$remove="DELETE from current_users WHERE time<'$time2'";
mysqli_query($remove) or die("No se puede borrar: " . mysqli_error());

?>

El archivo anterior, al que llamaremos counter.php, lo colocamos también en la carpeta contador. En dicho archivo se explican con diferentes etiquetas las sucesivas secciones del mismo.

Los capítulos de Un sencillo contador para tu web, además del actual, son los siguientes:

Fabriciano González

Amante de la informática y de Internet entre otras muchas pasiones. Leo, descifro, interpreto, combino y escribo. Lo hago para seguir viviendo y disfrutando. Trato de dominar el tiempo para que no me esclavice.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.