Contador PHP sin base de datos


Voy a utilizar 2 recursos interesantes en PHP, el control de archivos y la gestión de imagenes.

En un principio hemos de escoger, crear, modificar,… una imagen que será la base de nuestro contador. Esta es la mía:

mi contador

Desde la pagina tendreis que hacer una llamada al archivo que realmente es el motor de vuestro contador de esta manera:

<img src="http://path_a_count.php" border="0" alt="" />

En esencia lo que hago es crear/abrir un fichero que contiene el contador, la ip de la ultima visita y un contador de tiempo en seg (desde 1970, el tipico de php), lo que hace es ver la ip del visitante, y si es igual a la anterior y han pasado menos de 15 mnutos desde la ultima visita, no la cuantifica, en caso contrario (dif. ip, o más de 15 min. desde la ultima visita) si la cuenta.

y este es el código de count.php

Header( "Content-type: image/jpeg");
// Configuration section--------------------------------
$data_dir = "counter_data";
//miro si está creado el directorio y si no lo creo
if (!file_exists($data_dir)){
mkdir ($data_dir,0777);
}
$archivo = "/cont";
$fecha = date("U");
$i = 0;
$ip = getIP();
$archivo = $data_dir . $archivo . "_.txt";

//--- miro el contenidodel archivo...
$fp = fopen($archivo,"r");
while (!feof($fp))
{
$res = fgets ($fp, 50);
}
fclose($fp);

//--- divido el resultado en las variables que quiero
$palabra = strtok($res,"|");
while($palabra)
{
$var[$i] = "$palabra";
$i++;
$palabra = strtok("|");
}
// veo si ha cambiado la ip o ha estado mas de 15 mn y le sumo 1 en caso afirmativo
if ($var[0]==$ip)
{
$dateold = $var[2];
if ($fecha>$dateold + 900)
{
$var[1]++;
}
else
{
$cambio = "no";
}
}
else
{
$var[1]++;

}

//grabo los datos de todas formas.....

$datos = $ip . "|" . $var[1] . "|" . $fecha;
$fp = fopen($archivo,"w+");
fwrite($fp,$datos);
fclose($fp);
// ahora creo la imagen...

$im = imagecreatefromjpeg("gif/cont.jpg");
$black = ImageColorAllocate($im, 0, 0, 0);
$white = ImageColorAllocate($im, 255, 255, 255);

//configuro la salida del numero (tipico en php)
$nub = sprintf("%05d", $var[1]);

// y lo situo dentro de la imagen...
ImageString($im,5,50,32, $nub, $black);
ImageJpeg($im);
ImageDestroy($im);

function getIP() {
$ip = "";
if (getenv("HTTP_CLIENT_IP")) $ip = getenv("HTTP_CLIENT_IP");
else if(getenv("HTTP_X_FORWARDED_FOR")) $ip = getenv("HTTP_X_FORWARDED_FOR");
else if(getenv("REMOTE_ADDR")) $ip = getenv("REMOTE_ADDR");
else $ip = "UNKNOWN";
return $ip;
}

One response

9 08 2006

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s




A %d blogueros les gusta esto: