Foros del Web » Programando para Internet » PHP »

Como forzar la descarga de un archivo externo

Estas en el tema de Como forzar la descarga de un archivo externo en el foro de PHP en Foros del Web. Mi problema es que tengo este codigo para forzar descargas desde mi servidor, pero al intentar forzar un archivo que se encuentra almacenado en otra ...
  #1 (permalink)  
Antiguo 03/05/2011, 20:32
Avatar de shujidan  
Fecha de Ingreso: abril-2011
Mensajes: 121
Antigüedad: 13 años
Puntos: 5
Como forzar la descarga de un archivo externo

Mi problema es que tengo este codigo para forzar descargas desde mi servidor, pero al intentar forzar un archivo que se encuentra almacenado en otra web externa, no puedo leer su tamaño y por lo tanto se descargan 0 bytes del archivo

Código PHP:
Ver original
  1. <?
  2.         header('Content-Description: File Transfer');
  3.     header('Content-Type: application/octet-stream');
  4.     header('Content-Disposition: attachment; filename=$nombre_del_archivo');
  5.     header('Content-Transfer-Encoding: binary');
  6.     header('Expires: 0');
  7.     header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
  8.     header('Pragma: public');
  9.     header('Content-Length: '.filesize($URL_de_la_descarga)); //Este es el problema
  10.     ob_clean();
  11.     flush();
  12.     readfile($URL_de_la_descarga);
  13. ?>


En caso de omitir este header (Content-Length), cuando intento descargar archivos de texto, se agrega el html de la pagina al contenido del archivo.

Porfavor si alguien me pudiera ayudar le estaría muy agradecido.
  #2 (permalink)  
Antiguo 03/05/2011, 20:34
Avatar de Sotelio  
Fecha de Ingreso: mayo-2011
Ubicación: Santiago de Chile
Mensajes: 68
Antigüedad: 12 años, 11 meses
Puntos: 21
Respuesta: Como forzar la descarga de un archivo externo

Probaste eliminando content-length?
  #3 (permalink)  
Antiguo 03/05/2011, 20:36
Avatar de shujidan  
Fecha de Ingreso: abril-2011
Mensajes: 121
Antigüedad: 13 años
Puntos: 5
Respuesta: Como forzar la descarga de un archivo externo

Cita:
En caso de omitir este header (Content-Length), cuando intento descargar archivos de texto, se agrega el html de la pagina al contenido del archivo.
  #4 (permalink)  
Antiguo 04/05/2011, 12:03
Avatar de shujidan  
Fecha de Ingreso: abril-2011
Mensajes: 121
Antigüedad: 13 años
Puntos: 5
Respuesta: Como forzar la descarga de un archivo externo

Alguien sabe si hay otra forma de evitar que el html se incluya en los archivos de texto cuando intento descargarlos?
  #5 (permalink)  
Antiguo 04/05/2011, 12:18
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Como forzar la descarga de un archivo externo

¿Y por que debería existir HTML en la pagina que fuerza la descarga?

Se supone que lo único que debe tener tu script es el código para la descarga, no más.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #6 (permalink)  
Antiguo 04/05/2011, 12:39
Avatar de shujidan  
Fecha de Ingreso: abril-2011
Mensajes: 121
Antigüedad: 13 años
Puntos: 5
Respuesta: Como forzar la descarga de un archivo externo

Así debería ser, pero el servidor donde se almacena mi sitio (000webhost) agrega este codigo en todos los html y php's:

Código PHP:
Ver original
  1. <!-- www.000webhost.com Analytics Code -->
  2. <script type="text/javascript" src="http://analytics.hosting24.com/count.php"></script>
  3. <noscript><a href="http://www.hosting24.com/"><img src="http://analytics.hosting24.com/count.php" alt="web hosting" /></a></noscript>
  4. <!-- End Of Analytics Code -->

El cual se copia en los archivos de texto plano que quiero forzar para su descarga.
  #7 (permalink)  
Antiguo 04/05/2011, 12:43
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Como forzar la descarga de un archivo externo

Ahora si que se entiende.

Puedes usar exit para terminar la ejecución justo después de leer el archivo.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #8 (permalink)  
Antiguo 04/05/2011, 13:24
Avatar de shujidan  
Fecha de Ingreso: abril-2011
Mensajes: 121
Antigüedad: 13 años
Puntos: 5
Respuesta: Como forzar la descarga de un archivo externo

Esto es lo que me funcionó para saber el content-length:

Código PHP:
Ver original
  1. header('Content-Description: File Transfer');
  2.     header('Content-Type: application/octet-stream');
  3.     header('Content-Disposition: attachment; filename=$nombre');
  4.     header('Content-Transfer-Encoding: binary');
  5.     header('Expires: 0');
  6.     header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
  7.     header('Pragma: public');
  8. En caso de que el archivo fuera externo:
  9.     $x = array_change_key_case(get_headers($URLdescarga, 1),CASE_LOWER);
  10.     $x = $x['content-length'];
  11.     header('Content-Length: ' .$x);
  12. En caso de que el archivo estuviera en nuestro servidor:
  13.     header('Content-Length: ' .filesize('miarchivo.txt');
  14.     ob_clean();
  15.     flush();
  16.     readfile($URLdescarga);
  17.     exit();

Ya con el exit, se descarga correctamente el archivo sin texto demas, pero por ejemplo para que el navegador tenga en cuenta el tamaño del archivo cuando este se esta descargando si es necesario especificar el tamaño

Muchas gracias pateketrueke por el exit, nunca lo hubiera adivinado.

Última edición por shujidan; 07/02/2012 a las 17:58

Etiquetas: $_file, curl, descargas, header, readfile
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 17:39.