Foros del Web » Programando para Internet » PHP »

no soy capaz de hacer contador de descargas

Estas en el tema de no soy capaz de hacer contador de descargas en el foro de PHP en Foros del Web. Buenas, pues eso que no soy capaz de hacer un contador de descargas sin Base de datos. Este es mi archivo llamado descargar.php: Código PHP: ...
  #1 (permalink)  
Antiguo 24/01/2005, 16:20
MindPaniC
Invitado
 
Mensajes: n/a
Puntos:
no soy capaz de hacer contador de descargas

Buenas,

pues eso que no soy capaz de hacer un contador de descargas sin Base de datos.

Este es mi archivo llamado descargar.php:

Código PHP:
<?php
$extension 
".rar"// aqui colocas la extencion de los archivos


if (file_exists("$file$extension")) //Comprobamos si existe el archivo

header("Location: $file$extension"); // si existe redireccionamos hacia donde se encuentra el archivo
$archivo fopen("$mindpanicdestroydesinge.txt","r");
$contar fread($archivo100); 
$contarx = ($contar 1); 
fclose($archivo); 
$archivox fopen("$mindpanicdestroydesing.txt","w"); 
fwrite($archivox$contarx100); 
fclose($archivox); 

else {


else { echo 
"El archivo <b>$archivo$extension</b> no existe"; } 

?>
el archivo de texto Ç(mindpanicdestroydesing.txt) esta en la misma carpeta que descargas.php, tambien esta en esa misma carpeta el archivo que quiero descargar que es "mindpanicdestroydesing.rar".

bien y en la pagina que yo llamo sets.php he puesto esto:

Código PHP:
<a href="http://www.mindpanic.com/sets/archivos/descargar.php?file=mindpanicdestroydesing" class="mainmenu">&nbsp;-MindPaniC 
 Destroy Desing (Techno Session 12MB)&nbsp;</a>descargado <?php 
include("archivos/mindpanicdestroydesing.txt"); ?> veces.
.

esto esta colocado asi:

dentro de la carpeta sets esta:

-sets.php
-carpeta llamada "archivos"

dentro de archivos esta:

-mindpanicdestroydesing.txt
-mindpanicdestroydesing.rar
-descarga.php.

La cuestion es que no me funciona y no se por que. siempre que pincho en el enlace para descargar el archivo me sale una pantalla en blanco.

que he hecho mal¿¿???¿?¿
  #2 (permalink)  
Antiguo 24/01/2005, 16:49
Avatar de Takitei  
Fecha de Ingreso: septiembre-2004
Ubicación: Venezuela
Mensajes: 1.231
Antigüedad: 13 años, 3 meses
Puntos: 5
Código PHP:
$file=isset($_GET['file'])?$_GET['file']:''// aca compruebas si el archivo fue definido por URL
$extension=".rar"// aqui colocas la extencion de los archivos

if(file_exists("$file$extension")){ //Comprobamos si existe el archivo
  
$archivo fopen("mindpanicdestroydesing.txt","r");
  
$contar fread($archivo100);
  
$contar++;
  
fclose($archivo);
  
$archivox fopen("mindpanicdestroydesing.txt","w");
  
fwrite($archivox$contar100);
  
fclose($archivox);
  
header("Location: $file$extension"); //si existe redireccionamos hacia donde se encuentra el archivo
}else{
  echo 
"El archivo <b>$archivo$extension</b> no existe";

1****************: NO PUEDES COLOCAR NADA DESPUES DE UN header(), debido a que una cabecera detiene la ejecución del script!
2. Estabas usando $mindpanicdestroydesing.txt lo cual es incorrecto.
3. Estabas usando $mindpanicdestroydesinge.txt lo cual es incorrecto.
4. En lugar de usar dos parámetros fread() con r y w, puedes usar simplemente uno con el parámetro r+.

Un saludo!.
__________________
Takitei
Ingeniarte.com
DannyHerran.com
"Dadme un punto de apoyo y moveré la tierra" - Arquímedes.
  #3 (permalink)  
Antiguo 24/01/2005, 17:09
MindPaniC
Invitado
 
Mensajes: n/a
Puntos:
Funcionaaaaaa!!!

Muchas gracias tronco.

Una preguntilla mas: ¿tambien es valido para las veces que se hace click en un enlace?

¿como tendria que ser el script en ese caso?

bye
  #4 (permalink)  
Antiguo 24/01/2005, 17:16
Avatar de Takitei  
Fecha de Ingreso: septiembre-2004
Ubicación: Venezuela
Mensajes: 1.231
Antigüedad: 13 años, 3 meses
Puntos: 5
Haces lo mismo. Solo que cambiarimas algunas variables quedándote asi:

Código PHP:
$goURL=isset($_GET['go'])?$_GET['go']:''// aca obtienes la URL de destino

if(!empty($goURL)){ //Comprobamos si no esta vacia la variable
  
$archivo fopen("mindpanicdestroydesing.txt","r");
  
$contar fread($archivo100);
  
$contar++;
  
fclose($archivo);
  
$archivox fopen("mindpanicdestroydesing.txt","w");
  
fwrite($archivox$contar100);
  
fclose($archivox);
  
header("Location: $goURL"); //si existe redireccionamos hacia la URL especificada
}else{
  echo 
"URL inválida.";

Luego colocas tus links algo asi:

http://www.mindpanic.com/scriptTakit...tecnopedia.com

Un saludo!
__________________
Takitei
Ingeniarte.com
DannyHerran.com
"Dadme un punto de apoyo y moveré la tierra" - Arquímedes.
  #5 (permalink)  
Antiguo 24/01/2005, 17:41
MindPaniC
Invitado
 
Mensajes: n/a
Puntos:
ke fiera, funciona perfecto.

muchisimas gracias tronco. :)
  #6 (permalink)  
Antiguo 24/01/2005, 20:19
 
Fecha de Ingreso: febrero-2004
Mensajes: 221
Antigüedad: 13 años, 10 meses
Puntos: 0
Por cuestiones de portabilidad es recomendado usar rb en fopen.
No encuentro una buena razon para hacer la variable $goURL, ya que podrias tranquilamente usar $_GET['go'].
No encuentro una buena razon para abrir dos veces el archivo, mientras que lo podrias hacer una sola vez con rwb.

Saludos.
  #7 (permalink)  
Antiguo 25/01/2005, 04:49
MindPaniC
Invitado
 
Mensajes: n/a
Puntos:
Una pregunta más:

¿Se podria hacer que un solo archivo contador.php (que cuenta los clicks) llame a diferentes archivos .txt? Es decir usar varios archivos txt cada uno con diferente nombre (por ejemplo el nombre del link). Lo digo por que al tener muchos links y querer implementar un contador de clicks en cada link es un poco lioso en tener que crear un archivo de descarga y otro .txt para cada link.

Seria una variable tipo: si hago click en "x" link con "x" nombre que llame a descargas pero que el archivo txt al que llame para añadir un click más sea tambien el que tiene el mismo nombre que el link.

a ver que me contais.

Un saludo.
  #8 (permalink)  
Antiguo 25/01/2005, 06:05
Avatar de Takitei  
Fecha de Ingreso: septiembre-2004
Ubicación: Venezuela
Mensajes: 1.231
Antigüedad: 13 años, 3 meses
Puntos: 5
Amigo Appletalk, lee bien el script y dime tu cuál es la función de la variable goURL:

Código PHP:
 $goURL=isset($_GET['go'])?$_GET['go']:''
Como puedes ver es un operador ternario que valida al array superglobal que viene por GET. Hay que hacerlo a juro, si no validas, estás cometiendo un error de programación. Esa es la función de la variable goURL.

También podía haberlo hecho de esta forma:

Código PHP:
 $_GET['go']=isset($_GET['go'])?$_GET['go']:''
Pero es exactamente lo mismo. Asi que.. no nos compliquemos la vida.

Con respecto al comentario que hizo MindPanic, eso es muy sencillo. Tendrías que modificar algunas cosas asi:

Código PHP:
$file=isset($_GET['file'])?$_GET['file']:''// aca compruebas si el archivo fue definido por URL
$extension=".rar"// aqui colocas la extencion de los archivos

if(file_exists("$file$extension")){ //Comprobamos si existe el archivo
  
$archivo fopen("$file.txt","w+");
  
$contar fread($archivo100);
  
$contar++;
  
fwrite($archivox$contar100);
  
fclose($archivo);
  
header("Location: $file$extension"); //si existe redireccionamos hacia donde se encuentra el archivo
}else{
  echo 
"El archivo <b>$file$extension</b> no existe";

Pruébalo y me dices qué tal.

Un saludo!
__________________
Takitei
Ingeniarte.com
DannyHerran.com
"Dadme un punto de apoyo y moveré la tierra" - Arquímedes.
  #9 (permalink)  
Antiguo 25/01/2005, 06:19
MindPaniC
Invitado
 
Mensajes: n/a
Puntos:
Takitei, eso funciona perfecto para descargar archivos pero para el tema de los enlaces la cosa es diferente.

¿como se tendria que hacer?
  #10 (permalink)  
Antiguo 25/01/2005, 12:19
MindPaniC
Invitado
 
Mensajes: n/a
Puntos:
lalalalalaaaaaaaaaaaaaaa!!!!
lalalalalalaaaaaaaa!!!

a la cima de la ola.

a ver si hay solucion a la duda de utilizar un solo archivo php que vaya llamando a los diferentes txt en funcion del enlace que pinchas. Es que crear un archivo php para cada link es un coñazo y ocupa bastante teniendo en cuenta que son cientos de links.

saludos
  #11 (permalink)  
Antiguo 25/01/2005, 15:42
Avatar de Takitei  
Fecha de Ingreso: septiembre-2004
Ubicación: Venezuela
Mensajes: 1.231
Antigüedad: 13 años, 3 meses
Puntos: 5
Haces lo mismo que ya te dije en el último post amigo. Es muy sencillo. Voy saliendo, en 1 hora te doy respuesta específica a tu problema.

Espera mi respuesta.
__________________
Takitei
Ingeniarte.com
DannyHerran.com
"Dadme un punto de apoyo y moveré la tierra" - Arquímedes.
  #12 (permalink)  
Antiguo 25/01/2005, 19:19
Avatar de Takitei  
Fecha de Ingreso: septiembre-2004
Ubicación: Venezuela
Mensajes: 1.231
Antigüedad: 13 años, 3 meses
Puntos: 5
Para los enlaces haces algo asi:

Código PHP:
$goURL=isset($_GET['go'])?$_GET['go']:''// aca obtienes la URL de destino 

if(!empty($goURL)){ //Comprobamos si no esta vacia la variable
  
$archivo fopen("$goURL.txt","w+");
  
$contar fread($archivo100);
  
$contar++;
  
fwrite($archivo$contar100);
  
fclose($archivo);
  
header("Location: $goURL"); //si existe redireccionamos hacia la URL 
}else{
  echo 
"URL inválida.";

Un saludo!
__________________
Takitei
Ingeniarte.com
DannyHerran.com
"Dadme un punto de apoyo y moveré la tierra" - Arquímedes.
  #13 (permalink)  
Antiguo 25/01/2005, 20:58
Avatar de uamistad  
Fecha de Ingreso: diciembre-2004
Ubicación: Cd. de México
Mensajes: 1.395
Antigüedad: 13 años
Puntos: 1
Sonrisa

Yo en tu lugar preferiría una base de datos. Pero si no quieres una, entonces podrías tener algo así:

Código:
/* Inicio del Script de PHP */

Comprueba si NOMBREARCHIVO.rar existe.
Si el archivo existe, entonces:
  {
   Comprueba si existe NOMBREARCHIVO.txt
   Si aún no existe, entonces:
       {
        crea el archivo NOMBREARCHIVO.txt
       }
   Incrementa el contador del archivo NOMBREARCHIVO.txt
  }
else no existe NOMBREARCHIVO.rar, por lo tanto:
  {
   muestra mensaje en la pantalla que NOMBREARCHIVO.rar no existe.
  }

/*   Fin  del Script de PHP */
De esa manera no tendrás que hacer un archivo NOMBREARCHIVO.txt para cada uno de tus enlaces, ya que estos se crearán solitos la primera vez alguien quiera descargarlos.

Te decía que era más viable con una base de datos porque si almacenas los resultados en archivos tipo NOMBREARCHIVO.txt cuando quieras consultar cuáles son los archivos que más se descargaron en el último mes, cuál es el rating de descarga de cada uno en promedio por día te será más difícil hacerlo con estos archivos de texto.

Aunque no es imposible, déjame decirte. Podrías hacer un script que busque en tu carpeta local todos los archivos de texto que hay (es decir, todos los NOMBREARCHIVO.txt) y que te los vaya metiendo en un array del tipo:

$misarchivos=array("NOMBREARCHIVO"=>"número de descargas", "NOMBREARCHIVO=>"número de descargas", ...

y así hasta que analice todos tus archivos de texto. Que no se te ocurra consultar tus archivos de texto (que más bien son contadores de archivos individuales) uno por uno y manualmente, porque sería una locura, para eso nos ayudan los scripts y hay que utilizarlos, aprovecharnos de ellos.

Fijate que yo también estoy interesado en esto de monitorear cuando alguien se baja archivos de mi servidor, pero además que saber cuándo es que ellos hacen click o de saber si el archivo en mi server existe a mí me gustaría saber si mis visitantes se pudieron descargar el archivo o no, es decir, si la descarga fue satisfactoria.

Aún no logro hacerlo, nisiquiera tengo una idea de cómo se pueda hacer esto o bien, si se puede hacer. Si a alguien se le ocurre algo, se los agradecería mucho.

Saludos a toda esa comunidad que siempre está ahí cuando más lo necesito !!
  #14 (permalink)  
Antiguo 25/01/2005, 21:42
Avatar de Takitei  
Fecha de Ingreso: septiembre-2004
Ubicación: Venezuela
Mensajes: 1.231
Antigüedad: 13 años, 3 meses
Puntos: 5
Hay miles de formas de hacer un script de ese tipo. Utilicé como base el script de MindPanic para su comodidad.

Obviamente, como dice uamistad, con bases de datos es muchísimo mejor.
__________________
Takitei
Ingeniarte.com
DannyHerran.com
"Dadme un punto de apoyo y moveré la tierra" - Arquímedes.
  #15 (permalink)  
Antiguo 26/01/2005, 13:41
MindPaniC
Invitado
 
Mensajes: n/a
Puntos:
mmmm interesante... me estoy planteando el tema de crear una tabla con esos datos, pero con MySQL ando mas perdido que espinete en una fiesta techno. solo se hacer cuatro chorradas con Bases de datos..... veo que me toca leer y leer.

Gracias por las respuestas, soys unos fieras.

saludos.
  #16 (permalink)  
Antiguo 26/01/2005, 15:58
Avatar de Takitei  
Fecha de Ingreso: septiembre-2004
Ubicación: Venezuela
Mensajes: 1.231
Antigüedad: 13 años, 3 meses
Puntos: 5
Suerte amigo. Lee lee y sigue leyendo. Un saludo!
__________________
Takitei
Ingeniarte.com
DannyHerran.com
"Dadme un punto de apoyo y moveré la tierra" - Arquímedes.
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 08:11.