Como forzar la descarga de archivos con PHP

En algunos contextos quizá es necesario que el usuario descargue un archivo pdf, xls, csv, etc, para ver más información en otros formatos legibles en el ordenador o incluso con el objetivo de ser impresos. Los navegadores de hoy en día muestran directamente algunos tipos de ficheros en el navegador antes de descargarlo y quizá puede ser molesto si lo que deseamos es descargarlo directamente nada más pulsar en el enlace o botón.

En este artículo vamos a ver un ejemplo de como conseguir tal efecto. Explicaremos un ejemplo para descargar directamente un archivo en formato csv que deberá estar previamente depositado en el servidor.

Allí donde deseemos dentro de la etiqueta <body> añadiremos un enlace del estilo:

<a href="index.php?download_csv=1">Descargar archivo csv</a>

 

Después tan solo necesitaremos añadir el código PHP de control de la descarga en el mismo fichero o donde controlemos las acciones del usuario:

if (isset($_GET['download_csv'])) {
    $file_example = 'example.csv';
    if (file_exists($file_example)) {
        header('Content-Description: File Transfer');
        header('Content-Type: text/csv');
        header('Content-Disposition: attachment; filename='.basename($file_example));
        header('Content-Transfer-Encoding: binary');
        header('Expires: 0');
        header('Cache-Control: must-revalidate');
        header('Pragma: public');
        header('Content-Length: ' . filesize($file_example));
        ob_clean();
        flush();
        readfile($file_example);
        exit;
    }
    else {
        echo 'Archivo no disponible.';
    }
}

 

Lo primero que hacemos es comprobar que se haya pulsado en el enlace que contenga el parámetro de tipo GET “download_csv” con el simple objetivo de gestionar la descarga. Especificamos la ruta del fichero depositado en el servidor en la misma raiz del fichero que se ejecuta y comprobamos si existe para descargarlo.

A continuación especificamos información sobre el fichero para informar al navegador.

La función header() es imprescindible. Con ella conseguimos especificar e informar al navegador algunos datos relevantes para la descarga.

En este caso estamos indicando que:

  • deseamos hacer una transferencia de archivo
  • el tipo de archivo a procesar sea csv
  • se trata de un archivo adjunto
  • el tipo de codificación utilizada

Al final del script enviamos las cabeceras, limpiamos el buffer y abrimos el archivo que mostrará la ventana de descarga:

Ver ejemplo en funcionamiento

1 estrella2 estrellas3 estrellas4 estrellas5 estrellas (No hay votos)
Cargando…

Comparte en las redes sociales

Escrito por Jose Aguilar - Experto programador Prestashop y Wordpress.

Deja un comentario

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

*