2009-12-28 23 views
15

Duplicar posibles:
open download dialog with phpGenerar enlace de descarga de archivos en PHP

Tengo un enlace en mi página decir, <a href='test.pdf'>(Test.pdf)</a>. Cuando hago clic en ese enlace, debe abrir el cuadro de diálogo para descargar ese archivo. ¿Alguien puede ayudarme a implementar esto en PHP?

gracias

+0

Aquí tienes: http://stackoverflow.com/questions/985083/open-download-dialog-with-php http://stackoverflow.com/questions/732063/how-to-show-save-as- dialog-box-using-php-for-text-files – codaddict

+0

Esta no es una dupla de esas preguntas. Quieren generar un diálogo de descarga, este quiere el enlace para forzar una descarga en lugar de abrir el archivo en el navegador. ¿En qué puede el atributo de descarga html5 hacer eso '' – sidonaldson

Respuesta

32
$filename = 'Test.pdf'; // of course find the exact filename....   
header('Pragma: public'); 
header('Expires: 0'); 
header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
header('Cache-Control: private', false); // required for certain browsers 
header('Content-Type: application/pdf'); 

header('Content-Disposition: attachment; filename="'. basename($filename) . '";'); 
header('Content-Transfer-Encoding: binary'); 
header('Content-Length: ' . filesize($filename)); 

readfile($filename); 

exit; 

Nombre del archivo anterior como download.php

HTML:

<a href="download.php">Test.pdf</a> 

Eso debe hacerlo.

+0

si el archivo pdf descargado no se abre, dice que el archivo no está decodificado correctamente? –

+1

me funciona –

+0

@JacobRelkin Pregunta rápida. ¿Puedes pasar argumentos? ¿Te gusta download.php? Filecode = 1234 y utilízalo para completar las funciones del encabezado? o los encabezados deben llamarse antes de cualquier otra llamada. Ejemplo: '' '' $ filename = $ _get ['filecode'] '' '' – Caperneoignis

15
<a href="test.pdf">test.pdf</a> 
2

En el caso de un archivo PDF, la mayoría de los navegadores buscarán el helper (acrobat) para cargarlo en su navegador de manera predeterminada. Estás tratando de evitar este comportamiento predeterminado es mi suposición.

La forma más sencilla de hacer esto (asumiendo que usted está en la caja * nix con Apache) es hacer un archivo .htaccess en el directorio que desea tener este resultado y añadir la línea:

AddType application/octet-stream .pdf

Esto hará que cualquier archivo con la extensión .pdf se descargue de forma predeterminada. Incluso puede tener algunos archivos .pdf en la página cargados en el navegador mientras que otros descargan usando la directiva FilesMatch (http://www.askapache.com/htaccess/using-filesmatch-and-files-in-htaccess.html).

Me di cuenta de que su pregunta original decía "¿cómo puedo hacerlo con PHP?", Pero pensé en publicarla en caso de que estuviera buscando una solución más simple y más elegante. Tenga en cuenta que cualquier directiva que coloque en un archivo .htaccess también afectará a cualquier subdirectorio debajo de él.

Cuestiones relacionadas