¿Cómo forzar la descarga de un archivo en PHP?

Para forzar la descarga de un archivo, no es necesario usar el script PHP si desea mantenerlo simple. Si ese tipo de archivo se almacena en una carpeta de acceso público, simplemente cree un hipervínculo que apunte a ese archivo. Cuando el usuario haga clic en el enlace del archivo, se descargará el archivo. Puede consultar el primer ejemplo de cómo activar la descarga de un archivo al hacer clic en un artículo de botón HTML .

Forzar la descarga de un archivo usando PHP: Usaremos PHP aquí como el lenguaje de secuencias de comandos del lado del servidor. En PHP, esto se puede hacer usando la función readfile() . La función principal de readfile() es generar un archivo. Al hacer clic en cualquiera de los hipervínculos, el navegador descargará el archivo respectivo como se muestra. La validación de expresiones regulares (regex) en el ejemplo anterior usando la función preg_match() simplemente no permitirá la inserción de ningún carácter ilegal.

  • Script: Este script es downloader.php que se encargará de descargar los archivos.

    <?php
    if(isset($_REQUEST["file"])){
        // Get parameter and decode URL-encoded string
        $file = urldecode($_REQUEST["file"]); 
       
        // Test whether the file name contains illegal characters
            
        if(preg_match('/^[^.][-a-z0-9_.]+[a-z]$/i', $file)){
            $filepath = "public/" . $file;
       
            // Process download
            if(file_exists($filepath)) {
                header('Content-Description: File Transfer');
                header('Content-Type: application/octet-stream');
                header('Content-Disposition: attachment; filename="'
                                            .basename($filepath).'"');
                header('Expires: 0');
                header('Cache-Control: must-revalidate');
                header('Pragma: public');
                header('Content-Length: ' . filesize($filepath));
      
                // Flush system output buffer
                flush(); 
                readfile($filepath);
                die();
            } else {
                http_response_code(404);
                die();
            }
        } else {
            die("Download cannot be processed");
        }
    }
    ?>

Ejemplo: La idea es enviar la información de la ruta del archivo por URL como parámetro al archivo PHP downloader.php . Donde la información de la ruta del archivo se alimentará con la función readfile() después de verificar la validez del archivo. Si surge un error durante la validación, mostraremos un mensaje que dice: «No se puede procesar la descarga». Primero creemos la interfaz para el usuario en un archivo llamado index.html .

  • index.html La función urlencode() se utiliza como medida de seguridad para codificar la ruta del archivo en la URL.

    <?php
      
    // Array containing sample pdf file names
    $files = array(
        "test1.pdf",
        "test2.pdf"
    );
    $names = array(
        "Book GFG1",
        "Book GFG2"
    );
      
    // Loop through array to create library
    for ($i = 0;$i <= 1;$i++)
    {
        echo $names[$i];
        echo '<p>
        <a href="downloader.php?file=' . urlencode($files[$i]) . '">Download</a></p>';
      
    }
    ?>
  • Producción:

Publicación traducida automáticamente

Artículo escrito por soumit1234 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

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