簡體   English   中英

為什么下載的文件沒有下載而是顯示在瀏覽器中?

[英]Why downloaded file is not downloaded instead it is shown in browser?

我將網站中的訪問者從A頁重定向到B頁。在BI頁中,希望用戶獲得下載的PDF文件(在加載B頁時下載)。 我從另一篇文章中獲取了代碼(請參見此處回答上一個問題 ),而我的B頁代碼如下:

<?php
header('Content-Disposition: attachment; filename=nature.pdf');
header('Content-type: application/pdf'); 
$fn=fopen("/wp-content/nature.pdf","r");
fpassthru($fn);
?>

輸出不是通過打開下載對話框,而是在瀏覽器中顯示了一些不可讀的字符,例如以下內容(我剛剛在下面拾取了一個小示例):

%PDF-1.4% 3 0 obj <> streamx MK1 o + $ zIg& V =T =Xo K i+#V yx3 ඀ (BX pW`

服務器:OS Linux; PHP版本:5.2.17

訪問者->瀏覽器:Firefox; 作業系統:Windows 2000

是否可能由於客戶端的舊操作系統而失敗? 如果不是,是否有人知道如何強制下載的解決方案? 任何幫助將不勝感激。

謝謝。

嘗試使用Content-Length標頭:

ob_clean(); ob_start();
header('Content-Disposition: attachment; filename=nature.pdf');
header('Content-type: application/pdf'); 
header ("Content-Length: ".filesize("/wp-content/nature.pdf"));
readfile("/wp-content/nature.pdf");
exit;

最初引入Content-disposition時,真正的舊瀏覽器中存在一個怪癖,某些真正古老的瀏覽器不會顯示“另存為”對話框,除非它無法識別您要打開的文件類型。 嘗試將Content-type設置為無(或無法識別的內容),然后查看是否會迫使較舊的瀏覽器彈出“另存為”對話框。

header('Content-type: ');

如果可行,那么我建議添加一行PHP,以在運行該行之前檢測它們是否在舊的瀏覽器上,因為現代瀏覽器將使用該標頭來確定應使用哪個程序打開文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM