Foros del Web » Programación para mayores de 30 ;) » Programación General »

contador perl en tag img

Estas en el tema de contador perl en tag img en el foro de Programación General en Foros del Web. Hola amigos: La verdad es que me estoy iniciando en CGI's con Perl, y empecé con un sencillo contador: #!/usr/bin/perl print "Content-type: text/html\n\n"; open(cuenta, "<cuenta.txt") ...
  #1 (permalink)  
Antiguo 26/09/2003, 10:56
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años, 7 meses
Puntos: 1284
contador perl en tag img

Hola amigos:

La verdad es que me estoy iniciando en CGI's con Perl, y empecé con un sencillo contador:

#!/usr/bin/perl

print "Content-type: text/html\n\n";

open(cuenta, "<cuenta.txt") || &error("No se ha podido abrir el archivo");
$cuenta = <cuenta>;
close(cuenta);

$cuenta++;

open(wcuenta, ">cuenta.txt") || &error("Tampoco para escribir");
print wcuenta "$cuenta";
close(wcuenta);

print $cuenta;

Estoy seguro que puede mejorarse, y agradecería que me lo dijeran, pero mi pregunta va por otro lado, y se trata de saber como conseguir que la salida sea gráfica (por ejemplo *.gif)

Recuerdo un servicio que me ofrecieron que tenía que poner un tag "img"...

¿Eso serviría para usar el CGI en una página que no sea "shtml"?
y...
¿Que cosas tendría que cambiar...?

He visto que la línea del Content-type se puede poner image/gif...
Pero con eso solo no basta, ¿verdad?...

Saludos
  #2 (permalink)  
Antiguo 26/09/2003, 16:52
 
Fecha de Ingreso: mayo-2003
Mensajes: 328
Antigüedad: 21 años, 6 meses
Puntos: 0
Hola Caricatos:


Yo veo te código bien, esta sencillo y sin mayores complicaciones, lo que si es que te haría una recomendacion, te recomiendo que uses flock();

El problema, es que esta funcion sólo funciona en UNIX, así que si estas en Windows ni lo intentes, no existe.

Deja te explico un poco que es lo que hace flock().

Digamos que entran 2 usuarios con una diferencia de milisegundos. Entonces abres el archivo para sacar la cuenta con el usuario 1, pero con el usuario 2 ya pasaste ese paso y vas a escribir la nueva cuenta. Como vas a abrir y escribir el archivo al mismo tiempo, lo que puede ocasionar esto es un archivo corrupto.

Por esto, UNIX tiene la funcion de flock() , que lo que hace es "bloquear" el archivo mientras se esta usando.

Entonces en el mismo ejemplo, si usaras flock, al usuario 2 intentar escribir el archivo, tendría que esperar a que el usaurio 1 saque la cuenta y ya después escribir.


El código que debes usar es muy sencillo y aquí te pongo el ejemplo de como quedaría tu código.

Al leer el archivo:
Código:
open(cuenta, "<cuenta.txt") || &error("No se ha podido abrir el archivo");
flock(cuenta, 1);
$cuenta = <cuenta>;
close(cuenta);
Usamos el 1, que ves en la expresión de flock() porque esto permite que el archivo pueda ser leído, pero no escrito mientras se usa.


Al escribir el archivo:
Código:
open(wcuenta, ">cuenta.txt") || &error("Tampoco para escribir");
flock(cuenta,2);
print wcuenta "$cuenta";
close(wcuenta);
En este caso usamos el 2 para evitar que el archivo sea leído o escrito mientras sea usado.


Al usar flock() evitas el problemas de que sea escrito el archivo al mismo tiempo, lo que puede ocasionar, una mala cuenta o el archivo corrupto y más cuando tu sitio tiene mucho tráfico.


También lo que te recomiendo es que SIEMPRE que termines tu aplicaciones de perl uses la siguiente función:
Código:
exit();
Con esto términas por completo la aplicación, esto te va a evitar loops no deseados.

En cuanto a tus gráficos aquí hay unos módulos que podrías utilizar:

Chart::Graph
GD::Graph
Chart::Pie (Gráficas de "pay")

Puedes buscar estos módulos y más en http://search.cpan.org/

SALUDOS
  #3 (permalink)  
Antiguo 27/09/2003, 04:31
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años, 7 meses
Puntos: 1284
Gracias kidd:

Ya mismo voy a modificar mi contador con tus recomendaciones, que me han parecido muy buenas.

Y veré si me entero algo de lo de las gráficos.

Saludos
  #4 (permalink)  
Antiguo 28/09/2003, 22:29
mE
 
Fecha de Ingreso: junio-2002
Ubicación: guatemala
Mensajes: 20
Antigüedad: 22 años, 5 meses
Puntos: 0
codigo para generar imagen
http://cgi101.com/class/ch17/icount.txt

codigo para desplegar imagen
http://cgi101.com/class/ch17/count.txt

como funciona (ejemplo)
http://cgi101.com/class/ch17/count.html

lo unico q necesitas es tener GD instalado, y tener un folder llamado 'img' con una foto de cada numero (0-9) tipo png.
con pocas modificaciones podes cambiarlo a jpg
no se puede con gif por unas leyes de copyright.

mE
  #5 (permalink)  
Antiguo 29/09/2003, 12:18
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años, 7 meses
Puntos: 1284
Hola otra vez:

Gracias mE, he copiado el código para estudiarlo, pero tengo la duda de ¿cómo se generan los números en un fichero html?, he visto en el ejemplo, que la imagen es: <img src="icount.cgi?nnnn"> donde nnnn es el número.

Perdonen mi torpeza, pero me estoy iniciando en esto de los CGIs

Saludos
  #6 (permalink)  
Antiguo 29/09/2003, 13:16
 
Fecha de Ingreso: mayo-2003
Mensajes: 328
Antigüedad: 21 años, 6 meses
Puntos: 0
Hola caricatos:

Estuve viendo el código que te dio mE, y pues es similar al tuyo, lo único es que le sumo el print para mostrar una imagen, pero aún falta otro CGI, que es el icount.cgi, que debe de agarrar una imagen y mostrarla.

Puedes mostrar el contador de muchas maneras, una de las soluciones es tener números del 0 al 9 y hacer un CGI que arme el código para desplegar las imagenes en orden.

Ahorita no tengo tiempo como para mostrarte un ejemplo, pero si deseas, puedes envíarme un email a [email protected] y con gusto intentaré ayudarte.

SALUDOS
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:30.