Saltar al contenido

¿Cómo iniciar automáticamente una descarga en PHP?

Solución:

Envíe los siguientes encabezados antes de generar el archivo:

header("Content-Disposition: attachment; filename="" . basename($File) . """);
header("Content-Type: application/octet-stream");
header("Content-Length: " . filesize($File));
header("Connection: close");

@grom: Interesante sobre el tipo MIME ‘application / octet-stream’. No era consciente de eso, siempre he usado ‘aplicación / descarga forzada’ 🙂

A continuación se muestra un ejemplo de envío de un pdf.

header('Content-type: application/pdf');
header('Content-Disposition: attachment; filename="' . basename($filename) . '"');
header('Content-Transfer-Encoding: binary');
readfile($filename);

@Swish No encontré el tipo de contenido de aplicación / descarga forzada para hacer nada diferente (probado en IE y Firefox). ¿Hay alguna razón para no devolver el tipo MIME real?

También en el manual de PHP, Hayley Watson publicó:

Si desea forzar la descarga y guardado de un archivo, en lugar de ser renderizado, recuerde que no existe un tipo MIME como “aplicación / descarga forzada”. El tipo correcto para usar en esta situación es “application / octet-stream”, y usar cualquier otra cosa es simplemente confiar en el hecho de que los clientes deben ignorar los tipos MIME no reconocidos y usar “application / octet-stream” en su lugar (referencia: Secciones 4.1.4 y 4.5.1 de RFC 2046).

Además, según IANA, no hay ningún tipo de aplicación / descarga forzada registrada.

Un claro ejemplo.

<?php
    header('Content-Type: application/download');
    header('Content-Disposition: attachment; filename="example.txt"');
    header("Content-Length: " . filesize("example.txt"));

    $fp = fopen("example.txt", "r");
    fpassthru($fp);
    fclose($fp);
?>
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

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