Foros del Web » Programando para Internet » PHP »

Duda existencial sobre contador de descargas

Estas en el tema de Duda existencial sobre contador de descargas en el foro de PHP en Foros del Web. Hola, He usado en mi web un script de contador de descargas que creo conseguí en esta web, aunque no estoy seguro. El caso es ...
  #1 (permalink)  
Antiguo 29/05/2005, 03:33
Avatar de Batusai  
Fecha de Ingreso: enero-2005
Ubicación: Málaga -Andalucía- España
Mensajes: 130
Antigüedad: 12 años, 11 meses
Puntos: 1
Información Duda existencial sobre contador de descargas

Hola,

He usado en mi web un script de contador de descargas que creo conseguí en esta web, aunque no estoy seguro. El caso es que me da la sensación que algo hago mal. El script me funciona pero sólo lo aplico a un fichero. Me da la sensación de que si añado otro archivo usaría el mismo archivo donde se acumulan los "hits", y por lo tanto no podría distinguir entre las veces que se descargó el fichero1 y cuántas el fichero2.
Os pego el código para que lo mireis y quizá os sirva para entenderlo, porque como adivinareis yo de PHP aún sé muy poco, por no decir casi nada.

Creamos un archivo que podemos llamar: descargas.php
Abrimos ese archivo con el bloc de notas y pegamos:
Código:
<?
$extension = ".zip"; // EXTENSIÓN DE ARCHIVOS

if (file_exists("$archivo$extension")) {
header("location: $archivo$extension");
$file = fopen("contador/$contando.txt","r"); // archivo contador de descargas
$count = fread($file, 100);
$countplus = ($count + 1);
fclose($file);
$fileb = fopen("contando.txt","w");
fwrite($fileb, $countplus, 100);
fclose($fileb);
}

else { echo "El archivo <b>$archivo$extension</b> no existe. Notifíquelo al webmaster. Gracias"; }

?>
la última parte es para mostrar un mensaje si el archivo no existe, o hacer una página de error. Al archivo se le llama descargas.php?archivo=nombredelarchivo (sólo el nombre. La extensión no se pone porque haría que fallara el script) y se le da CHMOD 666 al archivo contando.txt. En el ejemplo que puse el txt está en el directorio contador y el fichero descargas.php en el mismo directorio donde tengo los archivos a descargar (esto último es imprescindible).

para la descarga:

Código:
<a href="../descargas.php?archivo=nombredelarchivo">Nombre del Archivo</a>
y para mostrar las veces descargadas sólo se requiere poner un include en donde quieras que se muestre el número de descargas realizadas:

Código:
Descargado <? include("../contador/contando.txt");?> veces
así saldría:

Archivo Descargado x veces

Ten en cuenta que todos los archivos deberán estar en la misma carpeta que este archivo, por lo cual te recomiendo que crees una carpeta para tus descargas.

Para llamar a tus descargas tendrás que hacerlo así:
http://www.tuweb.algo/descargas.php?...vo_a_descargar




Bien. Ese era el artículo entero, ligeramente modificado por mí. Como digo el script me funciona, pero ¿cómo consigo que diferencie en contando.txt las veces descargadas un archivo y las descargada cualquier otro? ¿tendría que crear un archivo .txt y otro descargas.php renombrado para cada descarga nueva?

Saludos.


Batusai
  #2 (permalink)  
Antiguo 29/05/2005, 04:26
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 13 años, 4 meses
Puntos: 101
...
1) Puedes crear un archivo contador para cada archivo para descargar.
- Pros: Quizá te resulte fácil captarlo y una vez hecho eso no tendrás problemas... no te metes en asuntos de prograación, solo de órden.
- Contras: ... vaz a tener varios archivos con el mismo contenido, ocuparás espacio innecesario y, depediendo de tu aplicación y tu organización, quizá te resulte difícil mantener la relación entre archivos.... tendrías que tener algo como:
Código HTML:
<a href="../desc_arch1.php">Archivo 1</a>
Descargado <? include("../contador/cont_arch1.txt");?> veces

<a href="../desc_arch2.php">Archivo 2</a>
Descargado <? include("../contador/cont_arch2.txt");?> veces
... notese que ya no sería necesario pasar parámetros pués tendrías la relación en uno a uno y al no haber posibles variantes puedes establecer la ruta/referencia directa.... como dije, solo deberás entender esto.


2) La idea que tienes... un solo archivo pero manejando identificadores.... se buscaría tener un archivo contador con una estructura como:
Código:
archivo1: 0
archivo2: 20
archivo3: 5
- Pros: La lógica sería similar a lo que tienes, solo habría que agregar la condicional al leer el archivo para idenificarlo y sumar solo donde debe.
- Contras: Tu estructura implicaría hacer uso de matricez, ciclos y condicionales... Resulta "vano" el manejar archivos con una estructura así cuando puedes utilizar una Base de Datos.
Para empezar:
www.php.net/fopen , www.php.net/read , www.php.net/fwrite , www.php.net/fclose (lo que haz estado ocupando... nada nuevo hasta aquí) www.php.net/array , www.php.net/explode , www.php.net/if , www.php.net/for , (ejemplos sobre el manejo de archivos) http://www.forosdelweb.com/f18/sistema-opinion-problema-280667/ , http://www.forosdelweb.com/f18/codigo-modificar-archivos-txt-282071/ ... no te asustes...


3) Y por mucho RECOMENDABLE, usar una Base de Datos... se trataría de tener guardar la ruta de tu archivo en una Base de Datos, entonces tendrías un solo script descargar que consultaría la BD, recuperaría la ruta para que descargue el archivo, recupera un campo contador, suma uno y actualiza...
Pros: Muchos.. fácilidad, un solo script, "soporte" (me refiero a que la posibilidad de que te cause un problema es mínimo), muuuchos ejemplos en el foro....
Contras: ... ... quizá debas cambiar la estructura de tu sitio...
Para empezar:
http://www.forosdelweb.com/f18/contador-descargas-php-276386/
http://www.forosdelweb.com/f18/mysql-no-cuenta-clics-287480/

Espero te haya servido de algo... decidete por algo, trata de emplearlo y ante cualquier duda pregunta y esperemos poder ayudar .

La mejor de las suertes!
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #3 (permalink)  
Antiguo 29/05/2005, 06:15
Avatar de Batusai  
Fecha de Ingreso: enero-2005
Ubicación: Málaga -Andalucía- España
Mensajes: 130
Antigüedad: 12 años, 11 meses
Puntos: 1
Gracias por la abundante, detallada y concreta respuesta. Me abrumas :P
Bueno, hace un rato, buscando alternativas, dí con un script que, como dices, facilita las cosas, al usar bases de datos. Dice así:

...utiliza una tabla MySQL y la URL es mas corta. la URL seria asi:
http://tuweb.com/descargar.php?descarga= 1, Para añadir una descarga, nos vamos al phpmyadmin, y añadimos una fila nueva a la tabla descargas1.


1º crear tabla:


Código:
create table descargas1 (

id smallint(5) unsigned not null auto_increment,

url varchar(255) NOT NULL,

titulo varchar (255) NOT NULL,

);



2º creamos la pagina "descargar.php"

En ella escribimos:


Código PHP:
<?php



//conexion MySQL



$host "localhost" ;

$user "Tu_Usuario" ;

$pass "*******" ;

$db "Tu_BaseDeDatos" ;

$tabla "descargas1" ;



$link mysql_connect $host $user $pass );

mysql_select_db $db $link );

?> <style type="text/css">

<!--

body,td,th {

     color: #FFFFFF;

}

body {

     background-color: #31333E;

     margin-left: 0px;

     margin-top: 0px;

     margin-right: 0px;

     margin-bottom: 0px;

}

.Estilo2 {

     font-family: Verdana, Arial, Helvetica, sans-serif;

     font-size: 18px;

}

.Estilo3 {font-family: Verdana, Arial, Helvetica, sans-serif}

.Estilo4 {font-size: 12px}

.Estilo5 {font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; }

-->

</style> <?php



//Conectamos a la base de datos

//Enviamos la consulta a la base de datos



$query "select * from $tabla where id=$descarga" ;

$resultado mysql_db_query $db $query $link );

//Busca resultados en la base de datos



while ( $datos mysql_fetch_array $resultado ))



//impresion del resultado



{

echo 
"  <p>&nbsp;</p>

   <p>&nbsp;</p><p class=Estilo2>Preparando descarga: <span class=Estilo2>$datos[titulo]



</span></p>

   <p class=Estilo4><img src= http://webtutorial.webcindario.com/pics/zip.gif width=15 height=16 align=absmiddle> <span class=Estilo3>$datos[url]</span></p>

   <p class=Estilo5>En <strong>5</strong> segundos se prepara la descarga</p>" 
;





?> <SCRIPT language=JavaScript>

<!--

var TargetURL = " <? echo $datos url ?> ";

var Sec = 5 * 1000



function doRedirect()

{

     setTimeout( "window.location.href = TargetURL", Sec);

}

//-->

</SCRIPT>



<SCRIPT language=JavaScript1.1>

<!--

function doRedirect()

{

     setTimeout( "window.location.replace(TargetURL);", Sec);



//-->

</SCRIPT> <? //cerramos la conexion



mysql_close $link );

?>

Bien, ¿qué código exactamente tengo que poner? Es que yo me lío aún con lo que puedo (o debo) PERSONALIZAR en un script y qué cosas debo dejar exactamente como el original.


Agradecido,


Batusai
  #4 (permalink)  
Antiguo 29/05/2005, 06:46
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 13 años, 4 meses
Puntos: 101
... parece que solo necesitas poner tus datos de conexión:
Código PHP:
$host "localhost" ;

$user "Tu_Usuario" ;

$pass "*******" ;

$db "Tu_BaseDeDatos" 
... entonces... gracias a que usas BD igual puedes crear el "despliegue" de los archivos que ahí tienes almacenados de una forma simple... pero antes de eso... personalmente no "lo veo bien" a el script:

1) No hace la descarga directa... crea la clásica página de "se descargará en 5 seg..." Yo te diría que usaras esa pág solo si quieres poner publicidad (para eso es)... de otra forma puedes hacer una descarga directa

2) ... según veo, solo redirecciona a el archivo... si esto es así no está haciendo una verdadera descarga. No sé qué tipo de archivos manejes ni cómo quieres manejarlos... pero de esta forma al "descargar" archivos que son reconocidos por el navegador (imágenes, .doc, .pdf, .mp3... etc) no los descargará realmente sino que los abrirá... solo lo digo como avizo

3) ... este script no te cuenta las descargas.. que creo es lo que realmente quieres... ¿podrías colocar el enlace de donde lo obtubiste??

Me gustaría ayudarte de una forma más directa (código), pero por ahora me es imposible, ojalá otro pueda ... ... espero leas los enlaces que dejé (opción 3).. quizá entiendas más del asunto.

Saludos!
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #5 (permalink)  
Antiguo 29/05/2005, 08:01
Avatar de Batusai  
Fecha de Ingreso: enero-2005
Ubicación: Málaga -Andalucía- España
Mensajes: 130
Antigüedad: 12 años, 11 meses
Puntos: 1
De acuerdo

Cita:
Iniciado por jam1138
1) No hace la descarga directa... crea la clásica página de "se descargará en 5 seg..." Yo te diría que usaras esa pág solo si quieres poner publicidad (para eso es)... de otra forma puedes hacer una descarga directa
No necesito esa página. Prefiero una descarga directa.
Por eso consultaba a vosotros, que sois expertos Porque no sabría cómo personalizarlo a mis necesidades.

Cita:
Iniciado por jam1138
2) ... según veo, solo redirecciona a el archivo... si esto es así no está haciendo una verdadera descarga. No sé qué tipo de archivos manejes ni cómo quieres manejarlos... pero de esta forma al "descargar" archivos que son reconocidos por el navegador (imágenes, .doc, .pdf, .mp3... etc) no los descargará realmente sino que los abrirá... solo lo digo como avizo
Son archivos en formato .zip y me gustaría que bajaran en descarga directa. También me gustaría que se pudiesen bajar con gestor de descargas, aunque no sé si eso complicaría mucho el código.

Cita:
Iniciado por jam1138
3) ... este script no te cuenta las descargas.. que creo es lo que realmente quieres... ¿podrías colocar el enlace de donde lo obtubiste??
http://www.tutorialesdelweb.com/tuto...Con-MySQL.html

Cita:
Iniciado por jam1138
Me gustaría ayudarte de una forma más directa (código), pero por ahora me es imposible, ojalá otro pueda ... ... espero leas los enlaces que dejé (opción 3).. quizá entiendas más del asunto.
Los leeré. Aunque mis conocimientos sobre PHP son prácticamente nulos y sobre HTML son muy básicos, es leyendo y leyendo la única forma de aprender. Así que todos los enlaces útiles me sirven de mucho. Muchas gracias por la ayuda prestada.

Saludos.
  #6 (permalink)  
Antiguo 30/05/2005, 03:09
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 13 años, 4 meses
Puntos: 101
Cita:
Iniciado por Batusai
(...) es leyendo y leyendo la única forma de aprender. Así que todos los enlaces útiles me sirven de mucho. Muchas gracias por la ayuda prestada.
Bien por esa actitud... y por enlaces no te podrás quejar .. unos llevan a otros más...

He dado una revizada rápida a el script que se manejó en un enlace que te dejé y no le veo problema... te será útil... hace la descarga directa simplemente redireccionando, nada de forzar descarga pero no lo necesitarás si usas archivos .zip... cuenta las descargas... definitivamente lo que buscas... te recomendaría siguieses ese camino ... habrá que leer bien y si tienes problemas pregunta ya sea en aquel post (supongo sería mejor) ó continua este tema...

Suerte!
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #7 (permalink)  
Antiguo 30/05/2005, 05:31
Avatar de Batusai  
Fecha de Ingreso: enero-2005
Ubicación: Málaga -Andalucía- España
Mensajes: 130
Antigüedad: 12 años, 11 meses
Puntos: 1
Cita:
Iniciado por jam1138
He dado una revizada rápida a el script que se manejó en un enlace que te dejé y no le veo problema...
¿Cuál es exactamente? Me diste tantos enlaces que me volvía loco
  #8 (permalink)  
Antiguo 31/05/2005, 03:10
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 13 años, 4 meses
Puntos: 101
.. estás en la última opción que manejé.. solo dejé 2 enlaces al respecto y donde se maneja código es el segundo.... dicho de otra manera, este: http://www.forosdelweb.com/showthread.php?t=287480

__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
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:43.