para - Cómo iniciar automáticamente una descarga en PHP?
html boton descargar archivo (4)
Aquí hay un ejemplo de cómo enviar 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 @Swish para hacer algo 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 que se descargue y guarde un archivo, en lugar de representarlo, recuerde que no existe un tipo MIME como "aplicación / descarga forzosa". 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 tipos MIME no reconocidos y usar "application / octet-stream" en su lugar (referencia: Secciones 4.1.4 y 4.5.1 de RFC 2046).
También según IANA no hay ningún tipo de aplicación / descarga de fuerza registrada.
¿Qué código necesita agregar en PHP para que el navegador descargue automáticamente un archivo a la máquina local cuando se visita un enlace?
¿Estoy pensando específicamente en la funcionalidad similar a la de los sitios de descarga que solicitan al usuario guardar un archivo en el disco una vez que haga clic en el nombre del software?
Envíe los siguientes encabezados antes de imprimir el archivo:
header("Content-Disposition: attachment; filename=/"" . basename($File) . "/"");
header("Content-Type: application/force-download");
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 ''application / force-download'' :)
Un limpio 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);
?>
mi código funciona para las extensiones txt, doc, docx, pdf, ppt, pptx, jpg, png, zip y creo que es mejor utilizar los tipos MIME reales explícitamente.
$file_name = "a.txt";
// extracting the extension:
$ext = substr($file_name, strpos($file_name,''.'')+1);
header(''Content-disposition: attachment; filename=''.$file_name);
if(strtolower($ext) == "txt")
{
header(''Content-type: text/plain''); // works for txt only
}
else
{
header(''Content-type: application/''.$ext); // works for all extensions except txt
}
readfile($decrypted_file_path);