Cómo forzar descarga de archivos en tu web con PHP

18/05/2024 | PHP | 0 comentarios

Guía práctica para forzar la descarga de archivos con PHP: todo lo que necesitas saber para ofrecer descargas desde tu sitio web.

Descargar archivos


En desarrollo web, a menudo necesitamos permitir a los usuarios descargar archivos. PHP ofrece una manera efectiva de lograr esto, permitiéndonos forzar la descarga de archivos en lugar de que se abran en el navegador.

Descargar archivos con PHP

Para forzar la descarga de archivos, se hace uso de los headers, estos headers sirven para indicar al navegador diferentes datos relacionados con los archivos. En nuestro caso usaremos:

  • Content-type para indicar el tipo de archivo que se envía.
  • Content-disposition para indicar como se debe mostrar el archivo.
  • Content-Length para indicar el tamaño del archivo.

Además de los headers, usaremos la función readfile para leer y enviar el archivo que se quiere descargar. Entonces un script básico para forzar la descarga de un archivo sería:


$file = 'document.pdf';

header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="' . $file . '"');
header('Content-Length: ' . filesize($file));

readfile($file);

Clase para descargar archivos

Ahora que conocemos como funciona la descarga de archivos, vamos a crear un clase PHP que se encargue de definir una carpeta donde se alojarán los archivos para la descarga, además que verifique si el archivo existe y finalmente que fuerze la descarga del archivo.


<?php
// file: file-downloader.php
class FileDownloader
{
    private $basePath;

    public function __construct($basePath = 'downloads') {
        $this->basePath = $basePath;
    }

    public function download($file) {
        $fileName = basename($file);
        $filePath = $this->basePath . '/' . $fileName;

        if (file_exists($filePath)) {
            header('Content-Description: File Transfer');
            header('Content-Type: application/octet-stream');
            header('Content-Disposition: attachment; filename="' . $fileName . '"');
            header('Content-Length: ' . filesize($filePath));

            readfile($filePath);
            exit;
        } else {
            http_response_code(404);
            die();
        }
    }
}

Es clase la podemos utilizar de la siguiente manera:


require('file-downloader.php');

$downloader = new FileDownloader();
$downloader->download('document.pdf');

Integración en tu Sitio Web

Usaremos nuestra clase para permitir a nuestros visitantes descargar archivos ubicados en la carpeta downloads. Entonces creamos un script PHP que se encargue de recibir el nombre del archivo que se quiere descargar:


<?php
// file: download.php
require('file-downloader.php');

if (isset($_GET['file'])) {
    $downloader = new FileDownloader();
    $downloader->download($_GET['file']);
} else {
    echo 'Archivo no seleccionado.';
}

Finalmente puedes crear enlaces para descargar archivos de la siguiente manera:


<a href="download.php?file=document.pdf">Descargar Archivo PDF</a>

Con estos pasos, has aprendido cómo forzar la descarga de archivos utilizando PHP. Ahora, tus usuarios podrán descargar fácilmente archivos desde tu sitio web de manera segura y eficiente. ¡Espero que este artículo te haya sido útil!

Referencias

Envíar Comentario

En este sitio los comentarios se publican previa aprobación del equipo de Kodetop. Evita los comentarios ofensivos, obscenos o publicitarios. Si deseas publicar código fuente puedes hacerlo entre las etiquedas <pre></pre>