Foros del Web » Programando para Internet » PHP »

links descarga profesionales

Estas en el tema de links descarga profesionales en el foro de PHP en Foros del Web. esta cuestión me parece que es complicada pero también sé que hay verdaderos profesionales en este foro así que tengo esperanzas de ser respondido. Algunas ...
  #1 (permalink)  
Antiguo 30/09/2008, 22:27
 
Fecha de Ingreso: enero-2004
Mensajes: 207
Antigüedad: 20 años, 3 meses
Puntos: 1
links descarga profesionales

esta cuestión me parece que es complicada pero también sé que hay verdaderos profesionales en este foro así que tengo esperanzas de ser respondido.

Algunas webs, especialmente aquellas que dan servicio de UPLOAD, luego proporcionan unos links "irreales" con nombre del archivo a descargar, ya sea un .exe, .zip, .rar, etc pero que realmente corresponde a un arhivo .php que lanza la descarga. Hasta aquí nada que cualquier programador un poco ducho pueda hacer en su casita.

Ahora viene la parte difícil. Cómo se hace para lanzar la descarga?

A mí sólo se me ocurre utilizar
Código PHP:
header("location:"
pero si hacemos esto, revelamos la url destino y se va al traste todo el trabajo ocultar la ruta de la descarga. Si utilizamos un IFRAME, pues tres cuartos de lo mismo, tan sólo mirando desde el navegador la ruta de descarga nos la revela.

Cómo demonios, entonces, logran estas webs que en el diálogo de descarga siga apareciendo la ruta del php y no la del archivo que se está descargando?

gracias y ya sé que no es una cuestión fácil, no es el típico código que podemos hallar por la web.
  #2 (permalink)  
Antiguo 30/09/2008, 22:39
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: links descarga profesionales

Hola dblanco,

Efectivamente es con header(), pero no con location, si no envías cabeceras diferentes para descargar el archivo y luego usas readfile o envías el contenido directamente al explorador.

Revisa este link: http://www.ryboe.com/tutorials/php-h...force-download para una explicación más detallada.

Saludos.
  #3 (permalink)  
Antiguo 30/09/2008, 22:41
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: links descarga profesionales

Pues sí es algo típico y conocico.

Se hace con archivos .htaccess (En servidores Apache), que crean una URL de máscara que suele contener, en esos casos, un identificador único de la sesión, lo que impide que el link sea el mismo para todos. Internamente, se llama a una página .php (en realidad cualquier otro lenguaje que corra en servidores Apache) pasándole como variables de URL parámetros que son tomados de la URL "máscara", siguiendo un patrón. FInalmente, el archivo .php envía el archivo descargable (Busca más sobre forzar descarga+php)

Busca más al respecto (busca mod rewrite), hay mucha info al respecto.

Saludos,
  #4 (permalink)  
Antiguo 30/09/2008, 23:47
 
Fecha de Ingreso: enero-2004
Mensajes: 207
Antigüedad: 20 años, 3 meses
Puntos: 1
Respuesta: links descarga profesionales

gracias a ambos. Con este código:

Código PHP:
    header("Cache-Control: public");
         
header("Content-Description: File Transfer");
         
header("Content-Disposition: attachment; filename=<esto es lo que me falta>");
         
header("Content-Type: application/x-msdownload");
         
header("Content-Transfer-Encoding: binary");
    
readfile($file); 
ahora logro que se mantenga como ruta de descarga mi fichero php, lo que no sé es cómo conseguir el nombre del fichero. Me puedo inventar uno pero lo que yo quiero es utilizar el original que pertenece a un link externo que tampoco es directamente el .exe, .zip, .rar, etc sino que a su vez es otro php.

Es decir $file sería por ejemplo: http://www.dominioexterno.com/link.php?t=333 y al ir a esa página descarga "ejecutable.exe". Pues necesito recuperar ese nombre para mi "filename".

Cómo podría solucionar este nuevo problema?
  #5 (permalink)  
Antiguo 01/10/2008, 09:43
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: links descarga profesionales

Pues recupera el nombre, si lo tienes en una BDD, o en alguna otra forma solo lo recuperas y luego lo pasas como una cadena:
Código php:
Ver original
  1. $fileName = "Archivo.exe";
  2. header("Content-Disposition: attachment; filename=\"$fileName\"");

Saludos.
  #6 (permalink)  
Antiguo 01/10/2008, 12:21
 
Fecha de Ingreso: enero-2004
Mensajes: 207
Antigüedad: 20 años, 3 meses
Puntos: 1
Respuesta: links descarga profesionales

el nombre no lo tengo porque es un link externo y no veo el nombre hasta que lo descargo, ya que como digo el enlace no es al fichero en si mismo sino una página .php

Resumo por si lo he liado un poco. Tenemos este script externo:

http://www.dominioexterno.com/script.php que al ejecutarse descarga "archivo.exe"

Yo en mi web tengo un script: http://www.midominio.com/miscript.php que a ejecutarse descarga http://www.dominioexterno.com/script.php que a su vez descarga "archivo.exe" pero como es un script automático yo no sé el nombre de "archivo.exe" y precisamente esta es mi duda, cómo recupero el nombre del archivo para asignarlo a mi descarga.

Gracias
  #7 (permalink)  
Antiguo 01/10/2008, 12:56
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: links descarga profesionales

En ese caso vas a tener que ocupar la función fsockopen, y hacer una petición HTTP para el dominio externo, luego leer las cabeceras usando fread, en ellas viene el nombre del archivo, y posteriormente obtienes los datos binarios del archivo, los guardas en una variable y haces tu el re-envio, mandando las cabeceras correctas y el contenido binario del archivo.

Saludos.
  #8 (permalink)  
Antiguo 01/10/2008, 21:06
 
Fecha de Ingreso: enero-2004
Mensajes: 207
Antigüedad: 20 años, 3 meses
Puntos: 1
Respuesta: links descarga profesionales

he realizado varias pruebas y no me muestra el nombre del archivo. Por ejemplo este es el resultado de un archivo .zip:

Código HTML:
HTTP/1.1 200 OK Content-Length: 361544078 Content-Type: application/x-zip-compressed Last-Modified: Tue, 22 Mar 2005 16:15:00 GMT Accept-Ranges: bytes ETag: "2ee07a4cfa2ec51:3b4" Server: Microsoft-IIS/6.0 P3P: policyref="http://images.nana.co.il/w3c/p3p.xml", CP="NOI DSP COR NID CURa OUR NOR" Date: Thu, 02 Oct 2008 02:31:01 GMT Connection: close
(luego empieza el binario del zip en si mismo)

a propósito se consigue lo mismo con get_headers()

Si se te ocurre alguna otra sugerencia te lo agredecería.

Un saludo
  #9 (permalink)  
Antiguo 01/10/2008, 22:15
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: links descarga profesionales

Lamentablemente el servidor remoto es el que te tiene que enviar el nombre del archivo, este viene en la cabecera Content-type, o Content-disposition, si el servidor no te las envía es difícil conocer el nombre del archivo (o el tipo de archivo).

Saludos.
  #10 (permalink)  
Antiguo 02/10/2008, 10:15
 
Fecha de Ingreso: enero-2004
Mensajes: 207
Antigüedad: 20 años, 3 meses
Puntos: 1
Respuesta: links descarga profesionales

gracias por todo amiguete. He comprobado que es un tema algo aleatorio, ya que como tú dices algunas cabeceras sí te dan el nombre del archivo, así como el tamaño. Siempre es factible conseguir mi objetivo un poco más manualmente, guardando el nombre del archivo y el tamaño en una bbdd cada vez que añado un link.

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 22:18.