Descargar archivo automáticamente desde PHP – Lanzar descarga - Tutoriales y Videotutoriales en www.vertutoriales.com
Diseño de páginas web en Córdoba. Visitanos! Taller de Chapa y Pintura en Córdoba. Hnos Troncha Cartuchos reciclados en Córdoba Joyería y Platería en Córdoba - La Joya de Plata ForoHTML5 canvas Comprar este espacio por 5/mes Recetas de cocina rica y sana Comprar este espacio por 5/mes

Descargar archivo automáticamente desde PHP – Lanzar descarga

Bienvenidos a Ver Tutoriales.com, en esta ocasión os traigo un código en PHP para descargar archivos de nuestro servidor automáticamente sin que el usuario la lance.  Solo para que acepte.

Hay ocasiones en las que queremos que despues de hacer un listado, o sacar un reporte queremos que el archivo generado sea descargado por el usuario, para ahorrarnos el paso de que el propio usuario tenga que linkar al archivo, podemos facilitarselo lanzando la descarga automáticamente.

Así que veamos el código que os preparé en PHP:

$basefichero = basename(“tutorial.txt”);

header( “Content-Type: application/octet-stream”);
header( “Content-Length: “.filesize(“tutorial.txt”));
header( “Content-Disposition: attachment; filename=”.$basefichero.”");
readfile(“tutorial.txt”);

Esas 5 lineas de código son las necesarias para lanzar la descarga del fichero, en este caso tutorial.txt, pero vamos a hacerle unos arreglos y meterlo en una función para reutilizarla cambiando el archivo.

Veamos como quedaría:

function DescargarArchivo($fichero){

$basefichero = basename($fichero);

header( “Content-Type: application/octet-stream”);

header( “Content-Length: “.filesize($fichero));

header( “Content-Disposition:attachment;filename=” .$basefichero.”");
readfile($fichero);
}

Como podeis ver en la función DescargarArchivo, el contenido es practicamente igual a diferencia de que el valor del archivo a descargar ha sido modificado por una variable, en este caso $fichero, es el valor que recibe la función DescargarArchivo y que será utilizada a lo largo de la función. Mucho más comodo para reutilizarse si vais a tener que descargar varios archivos dentro de una misma aplicación.
Pues nada más! espero que descargueis vuestros archivos automáticamente con este código PHP para facilitar el trabajo a los usuarios.
Ya sabeis que si teneis alguna duda podeis dejar comentarios y os lo contestaré gustosamente.

Un saludo!

Más video tutoriales para que aprendas...

12 Respuestas

  1. RDIAZ

    junio 14th, 2010 a 6:39 pm

    1

    Hola,
    Estoy utilizando el codigo que compartes pero no logro hacer que funcione…
    La duda es si tu variable $fichero contiene toda la ruta de tu archivo? (“http://www.tusitio.com/carpetadescarga/archivo.zip”) o solo el nombre del archivo? lo he intantado de las dos formas y me descarga archivos de 1kb o de 428kb con el mismo nombre pero no es el original. Que estoy haciendo mal?

    Gracias.

  2. VideoTutoriales

    junio 14th, 2010 a 10:31 pm

    2

    Buenas RDiaz,

    Con respecto a tu duda, la ruta del fichero da igual si es absoluta o relativa, es decir, si pones “http://www.tutoriales.com/carpeta/archivo.zip”, que si pones, “./../video-tutorial.rar”.

    En el primer caso se le daría exactamente el lugar desde la raiz del dominio, y en el segundo caso accederíamos al directorio superior desde donde estamos ejecutando el script de descarga.

    Como consejo, si vas a utilizar varias llamandas para descargar, sería mejor poner la dirección absoluta. Además si de paso vas a ponerle urls amigables, sería necesario tambien la url absoluta.

    El que te descargue archivos más o menos pequeños no sé a que se debe. Pero se me ocurre que si estás generando el archivo en el momento, es posible que no le dé tiempo a crear el archivo completamente y lances la descarga antes de que esté completada la generación del archivo.

    Espero que le des solución.

    Un saludo!

  3. pancho

    agosto 3rd, 2010 a 10:59 pm

    3

    no da solucion porque no sirve

  4. VideoTutoriales

    agosto 4th, 2010 a 9:17 am

    4

    ¿Que problema te dá?

    Algo has de estar haciendo mal :) Por que ese código está en producción en algún proyecto propio.

    Si me cuentas te ayudo :)

  5. Jorge Andres

    septiembre 9th, 2010 a 10:37 pm

    5

    Hola Amigos, tengo una url que me muestra un pdf y necesitaria saber como puedo hacer para que este pdf se baje automaticamente a un alchivo, lo ideal seria que se imprima pero con que se baje solo a un archivo si que tenga que ir a clickear en la opcion guardar.

    Un saludo grande y desde ya gracias.

  6. VideoTutoriales

    septiembre 11th, 2010 a 1:45 am

    6

    Buenas Jorge,

    Siento decirte que esa opción la desconozco, supongo que lo que quieres es que una vez que seleccione la descarga del archivo, si es un pdf, en vez de que se abra desde el navegador se descargue directamente, creo que esa opción es más del navegador que del propio código html.

    La descarga de una archivo se hace linkando directamente a él con un enlace estandar, pero en este caso, el archivo se abre al ser pdf. Desconozco si hay alguna manera, si la hubiera no dudes que la expondré más adelante, tambien te pediría que si la encuentras la expliques para los que como tú tendrán la misma duda.

    Gracias de antemano!

    Un saludo!

    P.D. ¿Tal vez con JavaScript?

  7. Marco Gamboa

    noviembre 23rd, 2010 a 8:53 pm

    7

    hola,

    buscando… buscando…. por google me aparecio tu pagina, soy muy novato con esto de PHP y estoy hacien un proteyecto en el cual se generan archivos PDF y deben guardarce en el servidor automaticamnete…

    mi problema: no puedo hacer que se guarden automaticamente … puedo generar el PDF pero no puedo guardo en el servidor… tiene un codigo o algo que me pueda ayudar, acepto cualquier idea :D de como guardar un PDF en forma automatica en el servidor :D

  8. VideoTutoriales

    noviembre 25th, 2010 a 7:22 pm

    8

    Buenas Marco,

    Si ya eres capaz de generar el archivo, lo único que tendrás que hacer es guardarlo, el problema es posible que no sea de PHP sino de permisos de escritura en el servidor.

    Prueba a darle permisos a la carpeta donde estás guardando el fichero. Una vez descartada esta solución, tantearemos otras.

    Un saludete

  9. Mike

    junio 14th, 2011 a 10:09 pm

    9

    Hola, yo ya tengo un generador de reportes excel que funciona bien. Uso “\t” y “\n” para las tabulaciones y vueltas de carro respectivamente. El problema es que guarda el excel en el servidor aparte de permitir descargarlo. No me sirve el header() porque me lanza el error: “Cannot modify header information – headers already sent by… nombre del archivo”. Ya intenté todo para corregirlo pero no voy a poder cambiarle el ANSI dentro del servidor de produccion.

    Actualmente funciona con fopen() y fclose(), por lo que lo más lógico sería usar el unlink() para borrarlo. Lo he intentado con: ?action=eliminar&”.$ruta.” dentro del enlace. Lo recupero con if($_GET['action'] == eliminar) unlink($ruta); pero tampoco funciona. Me genera un segundo archivo, no me permite descargar ninguno y sólo se borra el segundo.

    ¿Qué estoy haciendo mal? El armado del archivo es muy complejo y no tengo tiempo ahorita para cambiarlo y hacerlo con tablas o buscarle con lo de header().

  10. VideoTutoriales

    junio 14th, 2011 a 10:36 pm

    10

    Buenas Mike, cual es el problema exactamente? que no puedes borrarlo? que no puedes descargarlo?

    El error que te dice, prueba a solo poner el código de descarga en la página. Con respecto al eliminar de unlink puedes ver el tutorial que preparamos en VerTutoriales.

    Un saludo!

  11. Karla

    diciembre 30th, 2011 a 7:58 pm

    11

    Hola lo que tengo que hacer es que en una pagina tengo q introducir ciertos parametros para asi generar un reporte y este rporte descargarlo(el reporte es un archivo excel).

    Mi aplicacion tiene q hacer esto autmaticamente definir los parametros, descargar el archivo y guardarlo, no se si es posible hacer esto o como cres que odria relizarlo.

    Saludos

  12. VideoTutoriales

    diciembre 31st, 2011 a 10:28 am

    12

    Buenas Karla

    Claro que es posible, lo primero es generar el reporte en excel, luego una vez que tengas el archivo, simplemente es utilizar el código expuesto en este tutorial.

    Si necesitas ayuda, estamos por aquí.

    Un saludo!


Insertar al RSS los comentarios de esta entrada

Escribe tu comentario