Foros del Web » Programando para Internet » PHP »

¿Como controlar transferencia utilizada en descargas?

Estas en el tema de ¿Como controlar transferencia utilizada en descargas? en el foro de PHP en Foros del Web. ¿Como controlar transferencia utilizada en descargas? Buenas gente. A ver si alguien me puede tirar alguna idea. Necesito implementar alguna forma de restringir la cantidad ...
  #1 (permalink)  
Antiguo 28/03/2008, 20:46
 
Fecha de Ingreso: junio-2007
Mensajes: 76
Antigüedad: 16 años, 9 meses
Puntos: 1
¿Como controlar transferencia utilizada en descargas?

¿Como controlar transferencia utilizada en descargas?

Buenas gente.
A ver si alguien me puede tirar alguna idea.
Necesito implementar alguna forma de restringir la cantidad de megas que puede descargar un usuario mensualmente.
La verdad he estado pensando como hacerlo, pero las cosas que se me ocurren creo no funcionarían.
Tengo una tabla donde se guarda el nombre del usuario, la cantidad de descargas que ha realizado, la transferencia que tiene permitida, y la transferencia que ha utilizado.
Cada vez que descarga un libro, se suma el peso del libro a la transferencia utilizada. Hasta ahí todo bien sin problemas.
La cuestión es como puedo hacer para que cuando comienza un nuevo mes la transferencia que ha utilizado quede en cero, y así le permita volver a descargar.
Lo que tengo hecho coteja que la transferencia utilizada sea menor que la permitida.
Me quede sin ideas. ¿Alguna sugerencia?

Saludos y gracias
  #2 (permalink)  
Antiguo 28/03/2008, 23:07
Avatar de korg1988  
Fecha de Ingreso: junio-2006
Ubicación: Santa Fe, Argentina
Mensajes: 825
Antigüedad: 17 años, 8 meses
Puntos: 19
Re: ¿Como controlar transferencia utilizada en descargas?

puedes programar la ejecucion de un script que compruebe que se inicio un nuevo mes y borre el total de descargas realizada por ese usuario

para automatizar que un script se ejecute cada un determinado tiempo automaticamente investiga sobre Cron Jobs

http://www.google.com.ar/search?hl=e...G=Buscar&meta=
  #3 (permalink)  
Antiguo 29/03/2008, 04:02
 
Fecha de Ingreso: junio-2007
Mensajes: 76
Antigüedad: 16 años, 9 meses
Puntos: 1
Re: ¿Como controlar transferencia utilizada en descargas?

Gracias Korg.

Estuve viendo lo que me pasas y creo que si podría ser la solución. El tema es que estuve buscando en mi cpanel la opción para agregar un cron y no la encuentro. Ya pedí soporte a mi proveedor de hosting, pero intuyo que esto no debe estar habilitado. Así que creo que estoy jodido, en esto. Vamos a ver que me contestan.

¿Alguna otra idea? ¿Existe algo que yo pueda instalar desde cpanel que me pueda servir de forma similar?

Es bastante urgente, ya que estuve sacando cuentas, y si bien tengo 30 gigas de transferencia no puedo dedicar mas de 20 a este sitio en particular. Calculo que si los 750 usuarios que tiene hoy el sitio descargaran tan solo 30 MB ya pasarían los 20 GB, y el numero crece rápidamente. Algunos descargan todo el contenido de la biblioteca. La mayoría no, pero si a todos se les diera por hacer lo mismo me dejan out el site.

Saludos y gracias

Última edición por Artefio; 29/03/2008 a las 04:08
  #4 (permalink)  
Antiguo 29/03/2008, 10:19
Avatar de korg1988  
Fecha de Ingreso: junio-2006
Ubicación: Santa Fe, Argentina
Mensajes: 825
Antigüedad: 17 años, 8 meses
Puntos: 19
De acuerdo Re: ¿Como controlar transferencia utilizada en descargas?

podrias hacerlo vos directamente

primero tendrias que agregar un campo en la tabla de los datos del usuario donde se guarde el mes actual.... con guardar solo el numero ya serviria
Código PHP:
date("m"); //esto tendrias que guardar 
entonces vas comprobando cada ves que realiza una descarga si el mes actual es igual al mes que tiene guardado en la base de datos y si es asi lo dejas descargar hasta el limite... cuando el limite se alcanza entonces ya no lo dejas descargar mas....

AHORA el dia en que el usuario ingrese a tu sitio de nuevo y el mes actual sea distinto al que tenia guardado en la base de datos que haces???

1- borras el total de descargas
2- cambias el mes de la base de datos por el actual y estoy ya habilitaria a que durante ese mes el pueda seguir realizando descargas hasta el maximo permitido!


WOW! QUE BUENA IDEA
jaja!

Por las dudas se me ocurrio darte una mano asi que te arme un codigo referencia

Código PHP:
<?

//primero saco el ultimo mes que tenga el usuario en sus datos

$consulta mysql_query("SELECT mes_actual FROM tabla_usuario WHERE usuario = 'pepe');"$link);

//recojo los datos
$datos mysql_fetch_array($consulta);

//compruebo que el mes habilitado para la descarga sea el actual
if($datos[mes_actual] == date("m")) {

    
//en caso de que sea correcto compruebo que la memoria permitida para descargas no este exedida
    
if($DESCARGA_TOTAL_REALIZADA_HASTA_EL_MOMENTO $TOTAL_PERMITIDO_DE_DESCARGA_MENSUAL){
        
//lo dejo descargar el archivo
    
} else {
        
//NO LO DEJO DESCARGAR NADA!!!
    
}

} else {
    
//ingreso el nuevo mes actual
    
mysql_query("UPDATE tabla_usuario SET mes_actual = '".date("m")."' WHERE usuario = 'pepe';"$link);
    
    
//y ahora le permito hacer la descarga
}
?>

Última edición por korg1988; 29/03/2008 a las 11:04
  #5 (permalink)  
Antiguo 29/03/2008, 14:35
 
Fecha de Ingreso: junio-2007
Mensajes: 76
Antigüedad: 16 años, 9 meses
Puntos: 1
Re: ¿Como controlar transferencia utilizada en descargas?

Aveces suele pasar que las ideas mas sencillas son las mas brillantes.
Yo había pensado en alguna que otra cosa que implicaba guardar la fecha de la ultima descarga, pero era más enredada y me daba la impresión de que no funcionaría.
Ahora mejor dormido y leyendo lo que me propones creo que me estaba enrrollando de mas con el tema. Solo se me ocurre una posible falla y es que el usuario estuviese justo un año (o más) sin descargar :P y lo intentara el mismo mes pero un año después. Creo que voy a guardar el mes y el año por las dudas, aunque es poco probable que suceda.

Gracias por tu ayuda, voy a ver de implementarlo, luego te cuento.

Saludos y arriba
  #6 (permalink)  
Antiguo 29/03/2008, 17:48
Avatar de korg1988  
Fecha de Ingreso: junio-2006
Ubicación: Santa Fe, Argentina
Mensajes: 825
Antigüedad: 17 años, 8 meses
Puntos: 19
Re: ¿Como controlar transferencia utilizada en descargas?

exacto, esa parte no se me habia ocurrido! jajaja... definitivamente estas en lo correcto, guardar el año es la mejor opcion aunque pensandolo bien.... NO CREO QUE A NINGUN USUARIO LE INTERESE ESPERAR 1 AÑO ENTERO PARA PODER DESCARGAR ALGUN ARCHIVO! JAJAJ..... ASI QUE N OTE LA COMPLIQUES, CON EL MES ALCANZA Y SOBRA! jaja

imaginate que yo hoy "marzo 2008" descargo todo mi limite!... y entonces no descargo mas nada hasta el año que viene!.... y el año que viene em marzo vuelvo a descargar!..... JAJA ES MEDIO LOCO! ADEMAS IGUALMENTE PODRIA DESCARGAR NUEVAMENTE EL AÑO QE VIENE YA QUE MES A MES SE ME VOLVERIA A HABILITAR EL LIMITE MAXIMO PARA DESCARGAR! :D
si lo pensas un segundo te das cuenta que no hace falta agregar el año...

igualmente bien pensado. podia haber sido una posibilidad en otra situacion .... pero al caso no es necesario...

bueno espero que me cuentes cuando ya este funcionando
o cualquir problema que tengas
  #7 (permalink)  
Antiguo 30/03/2008, 15:50
 
Fecha de Ingreso: junio-2007
Mensajes: 76
Antigüedad: 16 años, 9 meses
Puntos: 1
Re: ¿Como controlar transferencia utilizada en descargas?

Pues si es cierto, pero uno nunca sabe y si bien la posibilidad es mínima, agregar un campo mas no cuesta anda.

Quedo bien de bien, ya lo tengo funcionando y va perfecto. Fue medio complicado integrarlo porque esta bastante enredado el código con otras cosas que hace, como actualizar registros de dos tablas y crear un nuevo registro cuando el usuario nunca descargo, pero quedo OK.

No tengo idea de porque pero luego de hacer la actualización o la inserción no me deja usar el header para hacer la re dirección (aunque el archivo que procesa todo es aparte y no da ninguna salida ~%&@#$ ¡¡¡Inexplicable!!!), me dio bastante dolor de cabeza hasta que decidí usar un echo con location.href de javascript. Sea como sea quedo OK

Gracias por el aporte.
Saludos
  #8 (permalink)  
Antiguo 30/03/2008, 18:45
Avatar de korg1988  
Fecha de Ingreso: junio-2006
Ubicación: Santa Fe, Argentina
Mensajes: 825
Antigüedad: 17 años, 8 meses
Puntos: 19
Re: ¿Como controlar transferencia utilizada en descargas?

y porque no publicas el codigo y asi vemos cual puede ser la falla?
  #9 (permalink)  
Antiguo 30/03/2008, 20:12
 
Fecha de Ingreso: junio-2007
Mensajes: 76
Antigüedad: 16 años, 9 meses
Puntos: 1
Re: ¿Como controlar transferencia utilizada en descargas?

Pues si gustas darle una mirada, aquí está.
He modificado alguna linea para no hacer referencia al sitio web.

No es el código completo de toda la pagina sino la parte que realiza las actualizaciones y las re direcciones. Hay poco mas allá de esto, las consultas, parte del código que agrega dream, y 4 includes. No estoy seguro de si alguno de los includes pueda estar haciendo alguna salida que no permita luego el header. Anteriormente tenia 3 pero agregue un 4to que llama las sessiones de usuario desde el foro de phpBB. ahora que lo pienso revisare eso, a ver si no da alguna salida.

Esta pagina es llamada desde el link de descarga. Procesa los datos y si todo marcha ok, regresa a la pagina que la llama pasando un get que hace descargar el libro. Como verás utilizo la sintaxis del dreamweaver para escribir la menor cantidad de código posible :P ya se si es mejor escribir el código uno mismo para hacerlo mas limpio, y el dream tiene limitaciones, pero estoy acostumbrado a trabajar con el.

Saludos y ¡Gracias!
  #10 (permalink)  
Antiguo 30/03/2008, 20:13
 
Fecha de Ingreso: junio-2007
Mensajes: 76
Antigüedad: 16 años, 9 meses
Puntos: 1
Re: ¿Como controlar transferencia utilizada en descargas?

El Código

Código PHP:
<?php

if(isset($_GET['libroid'])){    
    if((isset(
$_SESSION['user_usernamever']))&&($_SESSION['user_usernamever'] != "Anonymous")){    
    
    
// corroboramos si el usuario ya descargo o no comprovando si existe un registro del mismo
    
if($totalRows_descargas_datos == "1"){ // si ya hay registro del usuario corroboramos cuanto gasto de su transferencia
        // SI LA TRANSFERENCIA PERMITIDA ES MAYOR QUE LA UTILIZADA PERMITIMOS LA DESCARGA
        
if($row_descargas_datos['transferencia_utilizada'] < $row_descargas_datos['transferencia_permitida']){
            
////////////////////////////////////////////////////////////////////////////////////////
            // PERMITIMOS LA DESCARGA //////////////////////////////////////////////////////////////                
            
$descargado_nveces $row_libro_descargar['descargas_libro']+1;
            
// ACTUALIZACION DE LOS DATOS DEL LIBRO
            
$updateSQL sprintf("UPDATE libros SET nombre_libro=%s, autor_libro=%s, descripcion_libro=%s, biblioteca_libro=%s, usuario_libro=%s, fecha_publicacion_libro=%s, descargas_libro=%s, ruta_libro=%s, disponibilidad_libro=%s WHERE id=%s",
                               
GetSQLValueString($row_libro_descargar['nombre_libro'], "text"),
                               
GetSQLValueString($row_libro_descargar['autor_libro'], "text"),
                               
GetSQLValueString($row_libro_descargar['descripcion_libro'], "text"),
                               
GetSQLValueString($row_libro_descargar['biblioteca_libro'], "text"),
                               
GetSQLValueString($row_libro_descargar['usuario_libro'], "text"),
                               
GetSQLValueString($row_libro_descargar['fecha_publicacion_libro'], "text"),
                               
GetSQLValueString($descargado_nveces"text"),
                               
GetSQLValueString($row_libro_descargar['ruta_libro'], "text"),
                               
GetSQLValueString($row_libro_descargar['disponibilidad_libro'], "text"),
                               
GetSQLValueString($row_libro_descargar['id'], "int"));
            
            
mysql_select_db($database_nombredelsitio_libros$nombredelsitio_libros);
            
$Result1 mysql_query($updateSQL$nombredelsitio_libros) or die(mysql_error());
            
            
// ACTUALIZACION DE LOS DATOS DE DESCARGA DEL USUARIO
            
$descargas_realizadas_por_el_usuario $row_descargas_datos['descargas_totales']+1;        
            
            
// CORROBORACION DE MES Y AÑO PARA BORRADO DE TRANSFERENCIA UTILIZADA AL CAMBIAR DE MES
            // Si el mes que corre y el año que corre son identicos al mes y el año de la ultima descarga, sumamos la transferencia utilizada al peso del archivo, para actualizar el valor de la transferencia ya utilizada en el mes.
            
if(($row_descargas_datos['mes_ultimadescarga'] == date("n"))&&($row_descargas_datos['anyo_ultimadescarga'] == date("Y"))){        
                
$transferencia_utilizada_por_el_usuario $row_descargas_datos['transferencia_utilizada'] + filesize($row_libro_descargar['ruta_libro']);    
            } else if((
$row_descargas_datos['mes_ultimadescarga'] != date("n"))||($row_descargas_datos['anyo_ultimadescarga'] != date("Y"))){ // Si el mes o el año de la ultima descarga difiere de el mes o el año corriente boramos la transferencia utilizada, y damos como primer valor del mes el peso del archivo solicitado.
                
$transferencia_utilizada_por_el_usuario filesize($row_libro_descargar['ruta_libro']);    
            }
            
//////////// FIN DE CORROBORACION DE MES Y AÑO PARA BORRADO DE TRANSFERENCIA MENSUAL UTILIZADA ///////////        
            
            
$mes_deultimadescarga date("n");
            
$anyo_deultimadescarga date("Y");
            
            
$updateSQL sprintf("UPDATE descargas SET usuario=%s, descargas_totales=%s, transferencia_permitida=%s, transferencia_utilizada=%s, mes_ultimadescarga=%s, anyo_ultimadescarga=%s, pago_donacion=%s, monto_donado=%s, dia_que_dono=%s, mes_que_dono=%s, anyo_que_dono=%s WHERE id=%s",
                           
GetSQLValueString($_SESSION['user_usernamever'], "text"),
                           
GetSQLValueString($descargas_realizadas_por_el_usuario"text"),
                           
GetSQLValueString($row_descargas_datos['transferencia_permitida'], "text"),
                           
GetSQLValueString($transferencia_utilizada_por_el_usuario"text"),
                           
GetSQLValueString($mes_deultimadescarga"text"),
                           
GetSQLValueString($anyo_deultimadescarga"text"),
                           
GetSQLValueString($row_descargas_datos['pago_donacion'], "text"),
                           
GetSQLValueString($row_descargas_datos['monto_donado'], "text"),
                           
GetSQLValueString($row_descargas_datos['dia_que_dono'], "text"),
                           
GetSQLValueString($row_descargas_datos['mes_que_dono'], "text"),
                           
GetSQLValueString($row_descargas_datos['anyo_que_dono'], "text"),
                           
GetSQLValueString($row_descargas_datos['id'], "int"));
            
            
mysql_select_db($database_nombredelsitio_libros$nombredelsitio_libros);
            
$Result1 mysql_query($updateSQL$nombredelsitio_libros) or die(mysql_error());
            
            
// header("Location: libros.php?libroid=" .$row_libro_descargar['id']. "&descargarlibro=ok");
            
echo "<script language=\"javascript\">location.href = \"libros.php?libroid=" .$row_libro_descargar['id']. "&descargarlibro=ok\";</script>";
            
//echo "ERROR 1";
        

        if((
$row_descargas_datos['transferencia_utilizada'] > $row_descargas_datos['transferencia_permitida'])||($row_descargas_datos['transferencia_utilizada'] == $row_descargas_datos['transferencia_permitida'])){
        
// si la transferencia utilizada supero la transferencia permitida redirigimos a una pagina dando aviso y negando la descarga
        // header("Location: libros.php?transferencia=excedida");
        
echo "<script language=\"javascript\">location.href = \"transferencia_excedida.php\";</script>";
        
// echo "ERROR 2";
        
}
        
    
/////////////////////////////////////////////////////////////////////////////////////////
    // AQUI TERMINA LA ACTUALIZACION DE LOS DATOS DEL LIBRO /////////////////////////////////
    /////////////////////////////////////////////////////////////////////////////////////////    
    
    
    /////////////////////////////////////////////////////////////////////////////////////////
    // SI EL USUARIO AUN NO DESCARGO LIBROS
    // CREAMOS UN REGISTRO PARA EL MISMO EN LA TABLA DE DESCARGAS
    
} else if($totalRows_descargas_datos != "1"){
    
            
$nuevo_usuario_descargas $_SESSION['user_usernamever']; // nombre de usuario levantado de la base del foro
            
$descargas_realizadas "1"// la del libro que esta siendo solisitado
            
$transferencia_permitida "31457280"// el balor es en Bites y son 30 MB
            
$transferencia_utilizada filesize($row_libro_descargar['ruta_libro']); //damos como primer valor el peso del libro solicitado
            
$mes_deultimadescarga2 date("n");
            
$anyo_deultimadescarga2 date("Y");
            
$pago_donacion "no";
            
$monto_donado "0";
            
$dia_que_dono "0";
            
$mes_que_dono "0";
            
$anyo_que_dono "0";
            
            
$insertSQL sprintf("INSERT INTO descargas (usuario, descargas_totales, transferencia_permitida, transferencia_utilizada, mes_ultimadescarga, anyo_ultimadescarga, pago_donacion, monto_donado, dia_que_dono, mes_que_dono, anyo_que_dono) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)",
                   
GetSQLValueString($nuevo_usuario_descargas"text"),
                   
GetSQLValueString($descargas_realizadas"text"),
                   
GetSQLValueString($transferencia_permitida"text"),
                   
GetSQLValueString($transferencia_utilizada"text"),
                   
GetSQLValueString($mes_deultimadescarga2"text"),
                   
GetSQLValueString($anyo_deultimadescarga2"text"),
                   
GetSQLValueString($pago_donacion"text"),
                   
GetSQLValueString($monto_donado"text"),
                   
GetSQLValueString($dia_que_dono"text"),
                   
GetSQLValueString($mes_que_dono"text"),
                   
GetSQLValueString($anyo_que_dono"text"));
            
            
mysql_select_db($database_nombredelsitio_libros$nombredelsitio_libros);
            
$Result1 mysql_query($insertSQL$nombredelsitio_libros) or die(mysql_error());
            
            
// TERMINA LA INSERCION DE NUEVO USUARIO DE DESCARGA
            // PERMITIMOS LA DESCARGA //////////////////////////////////////////////////////////////
                
        
$descargado_nveces $row_libro_descargar['descargas_libro']+1;
        
        
$updateSQL sprintf("UPDATE libros SET nombre_libro=%s, autor_libro=%s, descripcion_libro=%s, biblioteca_libro=%s, usuario_libro=%s, fecha_publicacion_libro=%s, descargas_libro=%s, ruta_libro=%s, disponibilidad_libro=%s WHERE id=%s",
                           
GetSQLValueString($row_libro_descargar['nombre_libro'], "text"),
                           
GetSQLValueString($row_libro_descargar['autor_libro'], "text"),
                           
GetSQLValueString($row_libro_descargar['descripcion_libro'], "text"),
                           
GetSQLValueString($row_libro_descargar['biblioteca_libro'], "text"),
                           
GetSQLValueString($row_libro_descargar['usuario_libro'], "text"),
                           
GetSQLValueString($row_libro_descargar['fecha_publicacion_libro'], "text"),
                           
GetSQLValueString($descargado_nveces"text"),
                           
GetSQLValueString($row_libro_descargar['ruta_libro'], "text"),
                           
GetSQLValueString($row_libro_descargar['disponibilidad_libro'], "text"),
                           
GetSQLValueString($row_libro_descargar['id'], "int"));
        
        
mysql_select_db($database_nombredelsitio_libros$nombredelsitio_libros);
        
$Result1 mysql_query($updateSQL$nombredelsitio_libros) or die(mysql_error());
        
        
// header("Location:" .$row_libro_descargar['ruta_libro']);
        
header("Location: libros.php?libroid=" .$row_libro_descargar['id']. "&descargarlibro=ok");    
        echo 
"<script language=\"javascript\">location.href = \"libros.php?libroid=" .$row_libro_descargar['id']. "&descargarlibro=ok\";</script>";
        
// echo "ERROR 3";        
            
        ///////////////////////////////////////////////////////////////////////////////////
            
        
}
    }
}
?>
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 23:16.