PHP

Como forzar la descarga de un archivo con PHP

Cada tanto necesitamos cosas así :)

<?php
/**
 * Downloader
 *
 * @param $archivo
 *  path al archivo
 * @param $downloadfilename
 *  (null|string) el nombre que queres usar para el archivo que se va a descargar.
 *  (si no lo especificas usa el nombre actual del archivo)
 *
 * @return file stream
 */
function download_file($archivo, $downloadfilename = null) {
    if (file_exists($archivo)) {
        $downloadfilename = $downloadfilename !== null ? $downloadfilename : basename($archivo);
        header('Content-Description: File Transfer');
        header('Content-Type: application/octet-stream');
        header('Content-Disposition: attachment; filename=' . $downloadfilename);
        header('Content-Transfer-Encoding: binary');
        header('Expires: 0');
        header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
        header('Pragma: public');
        header('Content-Length: ' . filesize($archivo));
        ob_clean();
        flush();
        readfile($archivo);
        exit;
    }
}

Uso:
Si queres que el archivo se descargue con un nombre distinto al original.

<?php
download_file("archivos/archivoReal.zip", "archivoEnmascarado.zip");

Si queres que el archivo se descargue con el nombre original.

<?php
download_file("archivos/archivoReal.zip");

Comentarios

  1. Yeinel

    El path pude ser un url externo. Estoy implementando en mi aplicación cloud file de rackspace y puedo obtener el path absoluto de un archivo pero enviando ese path a esta funcion me descarga el archivo pero me dice que pesa 0 bytes.

    Responder
  2. Yeinel

    Me funcionó eliminando esta linea header(‘Content-Length: ‘ . filesize($archivo)); . gracias por el post lo necesitaba.

    Responder
  3. Giber

    Hola, ya me canse de estar buscando, soy nuevo en la programacion de PHP y HTML y todo lo referente a web.
    Necesito hacer que una de mis paginas sea descargable en PDF, me explico mejor.

    Me refiero a que, por decirlo asi, entro a un link que me lleva a un formulario, ese formulario despues de haberlo
    llenado, tenga al ultimo un boton que haga que lo que acabo de escribir, junto con todos los campos de informacion
    se descarguen en formato PDF, no se si me explico.

    Por ejemplo: que entre a Facebook, despues de haber escrito algo, me de la opcion de descargar una captura de pantalla por decirlo asi,
    de lo que acabo de escribir junto con todo el contenido que tenga la pagina y que en ese momento estoy viendo, que de la alternativa de
    poder guardarlo en mi ordenador y despues visualizarlo como pdf. encontre un condigo, pero no me funciona.

    Me gustaria saber si alguien sabe de esto y como hacerlo

    Responder
    1. Alejandro Calderón

      Hola Giber, yo te sugiero que revises la documentación de http://www.fpdf.org, es una librería gratuita para PHP muy sencilla de utilizar y generas el PDF como tu quieras, que te lo muestre en vista previa para que tu lo imprimas o guardes, o bien, que solo aparezca un Dialogo donde te pide la ubicación para guardarlo.

      Sería sencillo recibir a través de $_POST los campos del formulario y mandarlos como parámetro a tu generador del PDF, o que los almacenes en un array en una $_SESSION y de ahi los lea el generador del PDF y listo, no deberías tener problemas.

      Saludos.

      Responder
  4. pedro

    Hola, amigo lo estuve probando , pero el formato sale des configurado, el código que use es otro no este pero lo voy a probar , si puedes ayudarme escribeme a mi correo quiero descargar una lista de 20 archivos individuales en cualquier formato.

    Espero tu ayuda, capy

    Pedro

    Responder

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>