2009-12-28 83 views
15

下載文件鏈接可能重複:
open download dialog with php生成PHP

我在我的網頁上的鏈接說,<a href='test.pdf'>(Test.pdf)</a>。 當我點擊該鏈接時,應打開下載對話框以下載該文件。 任何人都可以幫助我在PHP中實現這一點?

感謝

+0

你在這裏: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 2009-12-28 05:34:12

+0

這不是這些問題的重複。他們想要生成一個下載對話框,這個人希望鏈接強制下載而不是在瀏覽器中打開文件。 html5下載屬性可以做到這一點:' – sidonaldson 2016-05-09 10:11:08

回答

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; 

名稱上述文件作爲download.php

HTML:

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

應該這樣做。

+0

下載的pdf文件不會打開它說文件沒有正確解碼? – 2012-12-11 12:32:28

+1

它適用於我 – 2015-06-21 04:35:38

+0

@JacobRelkin快速的問題。你可以傳遞參數嗎?像download.php?filecode = 1234並使用它們來填充標題功能?或者在任何其他調用之前必須調用標頭。例如:''''$ filename = $ _get ['filecode']'''' – Caperneoignis 2016-10-04 13:08:07

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

對於PDF文件,大多數瀏覽器默認都會尋找助手(acrobat)在瀏覽器中加載它。你試圖繞過這個默認行爲是我的猜測。

要做到這一點最簡單的方法(假設你在使用Apache * nix中盒)是使在目錄中,您希望有這樣的結果,並添加行.htaccess文件:

將AddType應用/ octet-stream .pdf

這將導致任何帶有擴展名.pdf的文件默認下載。您甚至可以在瀏覽器中加載一些.pdf文件,而其他人則可以使用FilesMatch指令(http://www.askapache.com/htaccess/using-filesmatch-and-files-in-htaccess.html)進行下載。

我意識到你原來的問題說:「我該怎麼用PHP來做」,但我想我會張貼,以防你正在尋找一個更簡單,更優雅的解決方案。請記住,您放在.htaccess文件中的任何指令也會影響其下的任何子目錄。