Insertar imágenes a un contador en PHP

Tengo el siguiente código para un contador
<?
$archivo = 'counter.dat';
$fp = fopen("$archivo","r");
if($fp){
$tam = filesize($archivo);
$datos = fread($fp, $tam);
fclose($fp);
$datos = $datos + 1;
print "Número de visitas:<b>$datos</b>\n";
$fp = fopen("$archivo","w");
if($fp)
fwrite($fp,"$datos");
else
print "No se pudo escribir el archivo\n";
fclose($fp);
}
else
print "No se pudo leer el archivo";
?>
La tarea que tengo es que en lugar de que aparezca texto en la cantidad de visitas, me aparezca en imágenes .gif, es decir, si ha habido 12 visitas tiene que aparecer la imagen 1.gi y la 2.gif, y bueno, que cada visita se vaya incrementado y por consiguiente también las imágenes .gif se vayan modificando. La verdad no encuentro una buena forma de hacer que esto suceda.
Respuesta
1
Aquí va un código que conseguí hace unos días y que funciona muy bien si hay algo que no entiendes por favor dímelo
Te dejo el comentario para que lo leas porque es necesario hay te explican los requerimientos para usarlo
Bueno espero que te sea útil
Chao Raidell.
<?
/* This script enable you to insert graphic counters in your web pages.
Condition is, the graphic files names are in form - 0.gif .. 9.gif, but
it shouldn't be problem to make necessary edits in script to make this
script to work with other file names.
To put counter to yout page is necessary to load this script in the page
with require function, and then call function CounterDisplay with file name
like argument in this function */
function Counter($counterFile){ // Basic function for counting of the accesses
if (File_Exists($counterFile)):
$file= FOpen($counterFile,rw);
$acc= FGets($file,6);
$acc=$acc+1;
FClose($file);
else:
$acc=1;
endif;
$file= FOpen($counterFile,w);
FputS ($file,$acc);
FClose($file);
return $acc;};
function CounterDisplay($file){
$nuacc=Counter($file);
$string=StrVal($nuacc);
$n=StrLen($string);
for ($i=0;$i<$n;$i++) {
$s=SubStr($string,$i,1);
echo "<img src=\"countergifs/".$s.".gif\" border=0>"; //In this line are possibilites to change file form
};
};
?>

3 respuestas más de otros expertos

Respuesta
1
Primero debes crear las imágenes de los números tal y como quieres que aparezcan. Una para cada número: 0, 1, 2, 3, 4, 5, 6, 7, 8 y 9.
Este código que te indico es perfectamente operativo, pero puedes implementarlo con el tuyo:
<?
$format = ".gif";
$dir = "/gifs";
$file = file("counter.dat");
$num = ($file[0] + 1);
exec("echo $num > counter.dat");
$i = 0;
$contador = strlen($num);
while($i < $contador) {
$tmpnum = substr($num, $i, 1);
echo("<img src=\"$dir/$tmpnum$format\">");
$i++;
}
?>
Ubica las imágenes del contador en un directorio y sustituye el valor de la variable $dir por ese directorio.
Sustituye el valor de la variable $format si el formato que has utilizado para las imágenes es diferente de gif (.png .jpg ...).
Y listo.
Buena suerte.
Un saludeT
Oye, muchas gracias, la verdad esta muy chido ese código que me enviaste, ya lo cheque y creo que si le va muy bien a mi archivo. Como apenas estoy aprendiendo a programar necesito preguntarte:
1. ¿Entiendo bien si ese código es precisamente lo que buscaba? Es decir, ¿lo qué hace es ponerle las imágenes al archivo que ya tengo verdad? No crea un nuevo contador sino que de ese contador lee las visitas y según su estado el código inserta la(s) imagen(¿es)?
Eso es lo que yo entiendo al leer el código.
2. Y bueno, otra más solamente y perdonando mi ignorancia, que bueno, si uno no pregunta no aprende: ¿Qué es lo que hacen están dos sentencias?
$tmpnum = substr($num, $i, 1);
echo("<img src=\"$dir/$tmpnum$format\">");
Sobre todo del $tmpnume, el 1 del final
Hombre, pues muchísimas gracias, la verdad es que puedo decir que sime quedo muy claro el código, salvo eso que prefiero me lo explliques un tanto mejor para no equivocarme.
Lo cierto es que yo no soy experto en php y me sorprendió que me preguntaras a mi. Sea como fuere, me alegro de haberte ayudado.
Contestando a tus preguntas:
1.- Sí, efectivamente, ese código puede generar un contador nuevo o leer uno ya creado. Para serte sincero, no es una invención mía. Lo encontré en la red hace tiempo y lo he modificado a mi gusto. No merezco mérito.
2.- Substr - lo que hace es extraer parte de una cadena.
La sintaxis es:
string substr (string cadena, int comienzo [, int largo])
En nuestro código: $tmpnum = substr($num, $i, 1);
cadena = $num // indica la cadena de donde tomará los datos (nuestro contador)
int comienzo = $i //indica el comienzo de la cadena
Para una cadena 1234 y un valor de $i = 0, se iniciará en 1; para un valor de $i = 2, se iniciará en 3, y así sucesivamente hasta acabar la cifra.
Por ello, guardamos la longitud de la cadena en una variable
$contador = strlen($num);
Creamos un contador cuyo valor guardamos en la variable $i, y le decimos que mientras $i < $contador repita una acción (en nuestro caso, imprimir las imágenes)
int largo = 1 // indica la longitud de la cadena que extrae, es decir, una cifra cada vez. Si en vez de un 1 pusieramos un 2, $i = 1 y la cadena fuera 1234, extraería 23 (2 cifras). Si pusieramos un 3, $i = 3 y la cadena fuera "okaboy", extraería "boy".
Si te he liado más, en la página de php tienes un ejemplo muy claro, visítala: http://www.php.net/manual/es/function.substr.php
La siguiente sentencia: echo("<img src=\"$dir/$tmpnum$format\">");
Lo que hace es imprimir los datos por pantalla, en nuestro caso, unos gifs que corresponden con los números.
Si te fijas, al sustituir las variables por los valores que se le han asignado anteriormente, se queda en un simple enlace a una imagen.
Bueno, soy algo malo explicando. Sea como fuere.
Si, le he entendido perfectamente esat vez, me hacia un poco de lio con ese 1, pero ya veo de que se trata y me queda más claro el funcionamiento, muchas gracias por tanta molestia tomada, y bueno, si no te molesta en otra ocasión preguntare de algo más que este aprendiendo.
Respuesta
1
Lo único complicado sería el generar los gráficos... aunque con PHP está chupado.
Tienes dos formas:
- Crear una zona donde pongas un gráfico al lado del otro, una especie de rejilla. Solo tendrás que tener 10 gifs con los número del 0 al 9 y sustituir cada cifra de tu contador por ese gráfico... y si por ejemplo tienes 30 visitas presentarías los gráficos 0 0 0 0 3 0. Como puedes ver la dificultad está en disponer bien los gráficos (usando una tabla o DIV).
- La segunda opción es más interesante y se aprovecha de la capacidad de PHP de generar gráficos dinámicamente... y como es demasiado largo te remito a un artículo de www.phpbuilder.com cuyo url es http://www.phpbuilder.com/columns/rasmus19990124.php3
Seguro que con este artículo no tendrás problemas para hacer lo que quieres.
Respuesta
1
Te pongo el código de uno de los contadores que yo uso, es muy sencillo y va muy bien :
<?
$height = "19";
$width = "15";
$fichero_contador = ""; // directorio del fichero
$imagesdir = ""; // directorio de las imagenes
$invisible="";
$tipo_contador="";
if (!$fichero_contador) $fichero_contador = dirname(__FILE__)."/counter.dat";
if (!$images) $images = dirname(__FILE__).$imagesdir;
$images = str_replace($DOCUMENT_ROOT, "", $images);
$f_contador = file($fichero_contador);
$f_contador = $f_contador[0] + 1;
# Opening the f_contador file and writing the number of f_contador:
$fp = fopen($fichero_contador, "w");
fwrite($fp, $f_contador);
if ($invisible != "yes") {
# Contador modo Texto
if ($tipo_contador == "text") {
echo $f_contador;
}
# Contador grafico
else {
$digit = strval($f_contador);
for ($i = 0; $i < strlen($f_contador); $i++) {
echo "<img src=$images/$digit[$i].gif height=$height width=$width alt=$f_contador>";
}
}
}
?>
Las imágenes de los dígitos han de llamarse 1.gif, 2.gif, etc ...
Si tienes alguna duda simplemente pregunta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas