Foros del Web » Programando para Internet » PHP »

Contabilizar descargas de una imagen (open rate)

Estas en el tema de Contabilizar descargas de una imagen (open rate) en el foro de PHP en Foros del Web. Quiero contabilizar la cantidad de lecturas de mi newsletters (open rate) y según muchas webs, eso se hace incluyendo un gif de 1 pixel y ...
  #1 (permalink)  
Antiguo 18/07/2007, 15:59
 
Fecha de Ingreso: diciembre-2005
Mensajes: 354
Antigüedad: 18 años, 3 meses
Puntos: 0
Contabilizar descargas de una imagen (open rate)

Quiero contabilizar la cantidad de lecturas de mi newsletters (open rate) y según muchas webs, eso se hace incluyendo un gif de 1 pixel y contabilizar desde el servidor la cantidad de veces que ésta se descargó.

Mas allá de la efectividad de conocer el openrate real... como hago yo para detectar desde el server, cuando archivo.gif es descargado?.

Gracias
  #2 (permalink)  
Antiguo 18/07/2007, 16:08
 
Fecha de Ingreso: septiembre-2006
Mensajes: 29
Antigüedad: 17 años, 7 meses
Puntos: 0
Re: Contabilizar descargas de una imagen (open rate)

Mmm...no te daré una respuesta certera, pues no estoy seguro de esto, sólo te daré algunas ideas...
Para contabilizar las descargas del archivo 'achivo.gif' puedes ver el log del servidor...no es algo muy práctico, pues necesitas parsear y contar los get de ese archivo...
Lo otro que puedes hacer, es usar de src en la imagen un archivo php, donde con GD devuelvas una imagen de 1x1 y además de generar la imagen, aumentas un contador. Así cada vez que alguien carga la news incrementará tu contador.
Yo voto por la segunda :P
Saludos y espero te sirva de algo
  #3 (permalink)  
Antiguo 18/07/2007, 16:15
 
Fecha de Ingreso: diciembre-2005
Mensajes: 354
Antigüedad: 18 años, 3 meses
Puntos: 0
Re: Contabilizar descargas de una imagen (open rate)

Cita:
Iniciado por MarcoAntoine Ver Mensaje
Mmm...no te daré una respuesta certera, pues no estoy seguro de esto, sólo te daré algunas ideas...
Para contabilizar las descargas del archivo 'achivo.gif' puedes ver el log del servidor...no es algo muy práctico, pues necesitas parsear y contar los get de ese archivo...
Lo otro que puedes hacer, es usar de src en la imagen un archivo php, donde con GD devuelvas una imagen de 1x1 y además de generar la imagen, aumentas un contador. Así cada vez que alguien carga la news incrementará tu contador.
Yo voto por la segunda :P
Saludos y espero te sirva de algo
SI, es la segunda opción. Se que se resuelve con php y no hace falta recurrir a los logs del server.

Ahora, no tengo experiencia con el uso de GD. Como sería la segunda opción exactamente?. Gracias
  #4 (permalink)  
Antiguo 18/07/2007, 16:16
Avatar de marcolandia  
Fecha de Ingreso: febrero-2007
Ubicación: En mi hermosa nación Arge
Mensajes: 107
Antigüedad: 17 años, 2 meses
Puntos: 2
Re: Contabilizar descargas de una imagen (open rate)

Hola, si tenés tu web alojada en una empresa de hosting (lo más probable) te podés fijar en el panel de control (si es que te dan uno) si hay alguna opción que diga los archivos descargados... pero seguramente ya te fijaste eso xD, o comunicarte con ellos para que te den esta opción
si es un server propio, tuyo, si tenés configurado el servidor web para hacer un log de cada archivo que se pide, ahí te podés fijar...
O podés hacer un script en PHP que cuente las visitas...
este code lo uso yo en mis webs y desde un panel de control que programé yo veo todas las visitas :D
creá estas dos tablas:
CREATE TABLE `visitas` (
`referer` text NOT NULL,
`ip` varchar(15) NOT NULL default '',
`user-agent` text NOT NULL,
`pagina-visitada` text NOT NULL,
`fechahora` datetime NOT NULL default '0000-00-00 00:00:00'
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
esta tabla, que se llama `visitas` guarda absolutamente TODAS las visitas.

y esta otra que se llama visitas-unicas, nada más guarda... las visitas únicas :D

CREATE TABLE `visitas-unicas` (
`referer` text NOT NULL,
`ip` varchar(15) NOT NULL default '',
`user-agent` text NOT NULL,
`pagina-visitada` text NOT NULL,
`fechahora` datetime NOT NULL default '0000-00-00 00:00:00'
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

Bueno ya tenemos las dos tablitas creadas
ahora tenemos este script:
Código PHP:
if(!$conexion=mysql_connect('server','user','password')){
echo 
"<span class=\"atencion\">Error al conectar con la base de datos... Porfavor contacta al webmaster enviando un e-mail a: [email protected]</span>";
exit();
}else{ 
//nos conectamos al server
mysql_select_db("base_De_Datos",$conexion);} //seleccionamos la db con la que vamos a trabajar

$query=mysql_query("select `ip`,`fechahora`  from `visitas` where ip='".$HTTP_SERVER_VARS["REMOTE_ADDR"]."' and `fechahora` like '".date("Y-m-d")."%'");
if(
mysql_num_rows($query)=="0"//si esta persona NO visitió hoy, insertamos sus datos en la tabla `visitas-unicas`
{
    
//echo "ES CERO--> ".mysql_num_rows($query);
mysql_query("INSERT INTO `visitas-unicas` (`referer`,`ip`,`user-agent`,`pagina-visitada`,`fechahora`) VALUE ('".strip_tags(mysql_real_escape_string($HTTP_SERVER_VARS["HTTP_REFERER"]))."','".strip_tags(mysql_real_escape_string($HTTP_SERVER_VARS["REMOTE_ADDR"]))."','".strip_tags(mysql_real_escape_string($HTTP_SERVER_VARS["HTTP_USER_AGENT"]))."','".strip_tags(mysql_real_escape_string($_SERVER['REQUEST_URI']))."','".date("Y-m-d H:i:s")."');");  
}     
   
    
//lo insertamos en la tabla de todas las visitas juntas:
mysql_query("INSERT INTO `visitas` (`referer`,`ip`,`user-agent`,`pagina-visitada`,`fechahora`) VALUE ('".strip_tags(mysql_real_escape_string($HTTP_SERVER_VARS["HTTP_REFERER"]))."','".strip_tags(mysql_real_escape_string($HTTP_SERVER_VARS["REMOTE_ADDR"]))."','".strip_tags(mysql_real_escape_string($HTTP_SERVER_VARS["HTTP_USER_AGENT"]))."','".strip_tags(mysql_real_escape_string($_SERVER['REQUEST_URI']))."','".date("Y-m-d H:i:s")."');");?> 
y en el mail ponés este simple código html: (suponiendo que el script se llama "contador_visitas.php"):
<img src="contador_visitas.php" alt="cool"/>
Y bueno así de simple, en la tabla `visitas-unicas` van a estar todas las visitas únicas y en la tabla `visitas` todas las visitas como dije antes, obviamente si querés podés eliminar la tabla ´visitas` y sacar esta línea del script y nada más te va a contar las visitas únicas:
Código PHP:
mysql_query("INSERT INTO `visitas` (`referer`,`ip`,`user-agent`,`pagina-visitada`,`fechahora`) VALUE ('".strip_tags(mysql_real_escape_string($HTTP_SERVER_VARS["HTTP_REFERER"]))."','".strip_tags(mysql_real_escape_string($HTTP_SERVER_VARS["REMOTE_ADDR"]))."','".strip_tags(mysql_real_escape_string($HTTP_SERVER_VARS["HTTP_USER_AGENT"]))."','".strip_tags(mysql_real_escape_string($_SERVER['REQUEST_URI']))."','".date("Y-m-d H:i:s")."');"); 
si querés que la imagen muestre algo, podés agregar esto al script:
Código PHP:
$image imagecreatefromjpeg("imagen.jpg");
//definimos el encabezado de acuerdo con el tipo de datos de salida
header("Content-type: image/png");
//generamos la imagen
imagepng($image);
//liberamos la memoria ocupada por la imagen
imagedestroy($image); 
y te va a mostrar image.jpg
Un saludo y decime cualquier error o lo que sea
  #5 (permalink)  
Antiguo 18/07/2007, 16:17
 
Fecha de Ingreso: junio-2005
Mensajes: 981
Antigüedad: 18 años, 10 meses
Puntos: 2
Re: Contabilizar descargas de una imagen (open rate)

Cita:
Iniciado por chancha Ver Mensaje
SI, es la segunda opción. Se que se resuelve con php y no hace falta recurrir a los logs del server.

Ahora, no tengo experiencia con el uso de GD. Como sería la segunda opción exactamente?. Gracias
Puf, muy simple, lee el manual oficial la sección "Funciones para imagenes" y Google seguro alguna ayuda te dará... ah y no te olvides de leer las FAQ de este foro.

Saludos.

EDIT:

Bueno, al parecer tenían ganas de hacer tu trabajo...
  #6 (permalink)  
Antiguo 18/07/2007, 16:40
 
Fecha de Ingreso: diciembre-2005
Mensajes: 354
Antigüedad: 18 años, 3 meses
Puntos: 0
Re: Contabilizar descargas de una imagen (open rate)

Muchas gracias marcolandia!!!. Creo que puedo adaptar ese código

DarioDario, Muchas gracias. Ya había buscado en google y en el buscador del foro también, sin demasiado éxito. Pareciera que, antes de preguntar algo, hay que avisar que uno ya buscó sin éxito para que no le reprochen. Gracias.
  #7 (permalink)  
Antiguo 18/07/2007, 17:34
 
Fecha de Ingreso: diciembre-2005
Mensajes: 354
Antigüedad: 18 años, 3 meses
Puntos: 0
Re: Contabilizar descargas de una imagen (open rate)

marcolandia, tengo una duda respecto al ejemplo que me has dado. Siendo que no se trabajar con imagenes en php, aprovecho este ejemplo para consultar.

Respecto a este código:
Código PHP:
$image imagecreatefromjpeg("imagen.jpg");
//definimos el encabezado de acuerdo con el tipo de datos de salida
header("Content-type: image/png");
//generamos la imagen
imagepng($image);
//liberamos la memoria ocupada por la imagen
imagedestroy($image); 
Aquí lo que haces es CREAR una imagen JPG para mostrar en pantalla, o simplemente muestras una imagen .jpg creada anteriormente en pantalla?.

Cosulto por que, en la web que dejó DarioDario, dice que la función imagecreatefromjpeg sirve para CREAR imagenes. Pero en la práctica, cuando lo implemento, necesita que el JPG ya exista previamente, y de ahí mi confusión.

Gracias
  #8 (permalink)  
Antiguo 18/07/2007, 17:44
Avatar de marcolandia  
Fecha de Ingreso: febrero-2007
Ubicación: En mi hermosa nación Arge
Mensajes: 107
Antigüedad: 17 años, 2 meses
Puntos: 2
Re: Contabilizar descargas de una imagen (open rate)

Cita:
Iniciado por chancha Ver Mensaje
marcolandia, tengo una duda respecto al ejemplo que me has dado. Siendo que no se trabajar con imagenes en php, aprovecho este ejemplo para consultar.

Respecto a este código:
Código PHP:
$image imagecreatefromjpeg("imagen.jpg");
//definimos el encabezado de acuerdo con el tipo de datos de salida
header("Content-type: image/png");
//generamos la imagen
imagepng($image);
//liberamos la memoria ocupada por la imagen
imagedestroy($image); 
Aquí lo que haces es CREAR una imagen JPG para mostrar en pantalla, o simplemente muestras una imagen .jpg creada anteriormente en pantalla?.

Cosulto por que, en la web que dejó DarioDario, dice que la función imagecreatefromjpeg sirve para CREAR imagenes. Pero en la práctica, cuando lo implemento, necesita que el JPG ya exista previamente, y de ahí mi confusión.

Gracias
Hola, exactamente, esa función sirve para crear imágenes desde una ya existente, como dice en php.net "imagecreatefromjpeg -- Crea una imagen nueva desde un archivo o URL" (http://ar.php.net/manual/es/function...tefromjpeg.php)
saludos
  #9 (permalink)  
Antiguo 18/07/2007, 17:51
 
Fecha de Ingreso: diciembre-2005
Mensajes: 354
Antigüedad: 18 años, 3 meses
Puntos: 0
Re: Contabilizar descargas de una imagen (open rate)

Cita:
Iniciado por marcolandia Ver Mensaje
Hola, exactamente, esa función sirve para crear imágenes desde una ya existente, como dice en php.net "imagecreatefromjpeg -- Crea una imagen nueva desde un archivo o URL" (http://ar.php.net/manual/es/function...tefromjpeg.php)
saludos
Tiene sentido entonces crear una imagen para esto?.
Calculo que ahorrará recursos el mostrar una imagen ya existente directamente, no?.

De hacer lo segundo, según busqué en php.net, puedo hacerlo con readfile() aunque no se si es la forma correcta, o mas óptima.
  #10 (permalink)  
Antiguo 18/07/2007, 19:13
 
Fecha de Ingreso: junio-2005
Mensajes: 981
Antigüedad: 18 años, 10 meses
Puntos: 2
Re: Contabilizar descargas de una imagen (open rate)

Cita:
Iniciado por chancha Ver Mensaje
Pareciera que, antes de preguntar algo, hay que avisar que uno ya buscó sin éxito para que no le reprochen. Gracias.
Que comes que adivinas? Yo cada vez que pregunto "aviso" que busque, con que me encontré y con que criterios busque... también "aviso" que intente y que logre sin éxito, y cuales errores me impidieron seguir hacia mi cometido. Te preguntaras porque todo el protocolo anterior? Muy simple, yo cada vez que preguntan sobre un tema que no conozco de memoria lo primero que hago es ir a Google (todos lo hacen cuando responden y no saben de memoria todo) y de nada sirve que yo me ponga a buscar si el que pregunta ya lo hizo y si ya lo hizo y no me aviso me esta haciendo perder tiempo que podría responder a otro usuario que si lo merezca. En caso de que "avise" que ya busco me dice con que criterio busco, entonces yo voy a Google con "otros ojos" y aplico mi experiencia o sentido común (el menos común de los sentidos al parecer) y busco con otros criterios para ver si consigo con éxito algún dato más.
Hay muchas razones más para que "avises" con cada consulta, pero sería hacer un post muy largo que terminarías sin leerlo ni prestarle atención
Hay un link que anda por ahí que explica como hacer preguntas inteligente, si lo ves leelo es algo que todos hemos leído y no tiene desperdicios.

Saludos.
  #11 (permalink)  
Antiguo 18/07/2007, 21:00
 
Fecha de Ingreso: diciembre-2005
Mensajes: 354
Antigüedad: 18 años, 3 meses
Puntos: 0
Re: Contabilizar descargas de una imagen (open rate)

DarioDario, no es mi intención discutir contigo. Se que no me lo dices de mala fe, pero al menos siento que las formas son algo agresivas o peyorativas. Disculpame si no es así, es sólo la impresión que me da. Desde ya tomaré tus recomendaciones para futuras preguntas, gracias por ello.

Ahora solo me intenresaría desasnarme en la pregunta anteriormente realizada:

Cita:
Cita:
Iniciado por marcolandia Ver Mensaje
Hola, exactamente, esa función sirve para crear imágenes desde una ya existente, como dice en php.net "imagecreatefromjpeg -- Crea una imagen nueva desde un archivo o URL" (http://ar.php.net/manual/es/function...tefromjpeg.php)
saludos
Tiene sentido entonces crear una imagen para esto?.
Calculo que ahorrará recursos el mostrar una imagen ya existente directamente, no?.

De hacer lo segundo, según busqué en php.net, puedo hacerlo con readfile() aunque no se si es la forma correcta, o mas óptima.
  #12 (permalink)  
Antiguo 18/07/2007, 21:34
 
Fecha de Ingreso: junio-2005
Mensajes: 981
Antigüedad: 18 años, 10 meses
Puntos: 2
Re: Contabilizar descargas de una imagen (open rate)

Cita:
Iniciado por chancha Ver Mensaje
DarioDario, no es mi intención discutir contigo. Se que no me lo dices de mala fe, pero al menos siento que las formas son algo agresivas o peyorativas. Disculpame si no es así, es sólo la impresión que me da. Desde ya tomaré tus recomendaciones para futuras preguntas, gracias por ello.
Pido disculpas si te sentistes agredido, no era mi intención, simplemente te quise demostrar de que es bueno darnos a conocer que hicistes y que no hicistes porque nos ayudas a ayudarte, nos das otras herramientas. Tal vez muchas veces no suene muy agradable pero no es mi intención pero creo que en ningún momento te falte el respeto insultandote ni haciendo uso de algún comentario despectivos contra ti, simplemente dije las cosas, tal vez no sean de la mejor manera pero las dije con respeto.
Tampoco es mi intención discutir por eso vuelvo a pedir perdón.


Cita:
Iniciado por chancha Ver Mensaje
Ahora solo me intenresaría desasnarme en la pregunta anteriormente realizada:
Perdón, tienes razón.

Cita:
Iniciado por chancha Ver Mensaje
Tiene sentido entonces crear una imagen para esto?.
Calculo que ahorrará recursos el mostrar una imagen ya existente directamente, no?.

De hacer lo segundo, según busqué en php.net, puedo hacerlo con readfile() aunque no se si es la forma correcta, o mas óptima.
Las funciones imagecreatefromXXX() necesitan una imagen ya existente ya que se basan en esta. Para no tener que depender de una imagen ya existente simplemente puede hacer uso de imagecreate() y simplemente creas una imagen de 1x1 pixeles y la envías. Con el tema de velocidad no se cual método es mejor si el que se basa en una imagen ya existente o no, pero quiero creer que es más rápido si se crea y se envía que si el script tiene que ir a leer una imagen desde el disco y recién enviarla.

Si puedes hacer uso de readfile() y también puedes usar fpassthru() con lo único que tienes que tener cuidado con las cabeceras HTTP que envías.

Saludos.
  #13 (permalink)  
Antiguo 19/07/2007, 10:14
 
Fecha de Ingreso: diciembre-2005
Mensajes: 354
Antigüedad: 18 años, 3 meses
Puntos: 0
Re: Contabilizar descargas de una imagen (open rate)

Gracias DarioDario. :)
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 17:30.