Foros del Web » Programando para Internet » PHP »

Ocultar ruta de las descargas exteriores

Estas en el tema de Ocultar ruta de las descargas exteriores en el foro de PHP en Foros del Web. Estoy programando un sistema de descargas con enlaces a archivos alojados en otra web de mi propiedad y quisiera saber el metodo para ocultar la ...
  #1 (permalink)  
Antiguo 18/02/2006, 18:06
 
Fecha de Ingreso: mayo-2005
Mensajes: 23
Antigüedad: 12 años, 6 meses
Puntos: 0
Ocultar ruta de las descargas exteriores

Estoy programando un sistema de descargas con enlaces a archivos alojados en otra web de mi propiedad y quisiera saber el metodo para ocultar la ruta del archivo, tipo web.com/descarga.php?id=X y que se ejecute la descarga diectamente en vez de un header location que al final muestra la ruta.
El link lo tengo almacenado en una tabla y quisiera saber como asociar el link a descarga.php?id=X y que eso ya se comporte como si fuera un archivo para descargar.

Gracias de antemano.
  #2 (permalink)  
Antiguo 18/02/2006, 19:12
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
tendrías que abrir y enviar el archivo desde la misma página "descarga.php", usando readfile() (por ejemplo) y enviando las cabeceras correspondientes al tipo de archivo.
Tenés que tener en cuenta, sin embargo, que con este método no existe la continuación de la descarga, si se interrumpe hay que empezar de nuevo.


Saludos.
  #3 (permalink)  
Antiguo 19/02/2006, 08:48
 
Fecha de Ingreso: mayo-2005
Mensajes: 23
Antigüedad: 12 años, 6 meses
Puntos: 0
Muchas gracias por tu ayuda, he probado esto y no me funciona. El codigo es este, si tiene algun error por favor digamelo:

Código PHP:
<?php
require_once($_SERVER["DOCUMENT_ROOT"]."/funciones.php");
if(
$id_usuario){
if(
$id_usuario!=1){
mysql_query("update descargas set descargado=descargado+1 where id='$id'");
}
$result=mysql_query("select * from descargas where id=$id limit 1");
$row=mysql_fetch_array($result);
    


$enlace=$row["direccion"];
header ("Content-Disposition: attachment; filename=descarga_".$enlace."\n\n");
header ("Content-Type: application/octet-stream");
header ("Content-Length: ".filesize($enlace));
readfile($enlace);




}else{
    
header("location: /mensajes.php?id=9");
}
?>

Última edición por temetotoelwebo; 19/02/2006 a las 12:28
  #4 (permalink)  
Antiguo 19/02/2006, 12:29
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
creo (nunca lo he hecho) que tenés que usar las funciones de manejo de salida (ob_*), fijate en las faq del foro cuando hacen muestra de imágenes de base de datos, el principio es el mismo.


Saludos.
  #5 (permalink)  
Antiguo 20/02/2006, 07:08
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Iniciado por alvlin
creo (nunca lo he hecho) que tenés que usar las funciones de manejo de salida (ob_*), fijate en las faq del foro cuando hacen muestra de imágenes de base de datos, el principio es el mismo.


Saludos.
No, no es necesario para este caso .. NO se trata de "capturar" el buffer de salida de PHP sino de "componer" las cabeceras HTTP adecuadas para indicar al cliente (navegador) que los datos que se van a enviar son de tal tipo (formato MIME principalmetne) y otros datos anexos para definir cosas como el nombre del archivo que se ofrecerá para descargar .. o su tamaño (para implementar funcionalidades con opción "resume" (hay una FAQ sobre esto en el foro de PHP) .. etc.

Un saludo,
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 05:16.