Ver Mensaje Individual
  #1 (permalink)  
Antiguo 09/03/2007, 14:36
atribis
 
Fecha de Ingreso: abril-2006
Ubicación: De vuelta en Asturias
Mensajes: 209
Antigüedad: 18 años
Puntos: 1
Descargar archivos

Hola a tod@s.

Llevo todo el día peleandome con google y distintos foros para encontrar como solucionar esto pero no lo consigo, así que he optado por preguntar a ver si alguien puede ayudarme.

El caso es que quiero permitir la descarga de una serie de archivos (quería en zip pero acabé probando en png directamente, no sé si habrá diferencia) pero contando las veces que se descargaban (en realidad las veces que se cliqueaba sobre el enlace de descarga porque en caso de cancelar, igual cuenta como una descarga)
Bueno, pues yo jamás había hecho descargas de otra forma distinta a la etiqueta <A>, así que al meterme en PHP se me complicó la cosa.
Encontré que tenía que utilizar "Header" con una serie de parámetros, pero el problema es que no encuentro información detallada en español sobre los mismos y no sé si son estos los que están impidiendo que funcione mal la cosa.

Bueno, tengo un enlace que pasa la variable $id al archivo php que tiene este código:

Código PHP:
<?
$id
=$_GET["id"];

//conecto la base de datos
include('libre_bd.php');
llamar_base();

//busco en la bd la id que me pasa el enlace
$consulta="select * from descargas where id=$id";
$resultado=mysql_query($consulta);
if(
$filas=mysql_fetch_array($resultado)){
//sumo una descarga al campo de la bd
    
$descargas=$filas['descargas']+1;
    
$sumar=mysql_query("update descargas set descargas=$descargas where id=$id");
//empiezo con la descarga
    
$archivo=$filas['archivo'];
    
header("Content-Transfer-Encoding: binary");
    
header("Content-type: application/force-download"); 
    
header("Content-Disposition:attachment; filename=$archivo");
    
readfile("http://www.misito.tal/downloads/$archivo");
}else{
    echo 
"<P>El archivo no se encuentra actualmente disponible para descarga</P>";
}
    
?>
No sé si los header que estoy utilizando son los adecuados. En algún momento he utilizado también header ("Content-Type: application/octet-stream"); en vez de force-download, pero tampoco funciona.
También he probado distintas formas de hacer referencia a la ruta del archivo (se supone que está en la carpeta downloads, la cual se encuentra en el mismo sitio que el archivo que hace la llamada), desde "http://misito.tal/downloads/$archivo, hasta solo downloads/$archivo e incluso la ruta absoluta del servidor (no sé como se llama en realidad, esa larga que consta de un montón de directorios que te proporciona el hosting)
Lo más que he conseguido es que me salga el cuadrito de diálogo que permite abrir o guardar, pero no funciona. Si le doy a abrir, me dice "vista no disponible" y si le doy a guardar hace la descarga, incluso reconoce el tipo de archivo pero cuando lo abro me dice tb que la vista no está disponible o si lo abró con un programa algún error de no se puede abrir.
He probado tanto con Explorer como con Firefox y falla con los dos, pero ahora mismo me urge más solucionarlo para IE.
¿Alguien puede ayudarme a encontrar lo que tengo mal o información para poder solucionarlo?
Muchas gracias de antemano