iT邦幫忙

0

[PHP,檔案下載,暫存檔]更新檔案讓使用者下載,如何讓瀏覽器清除暫存檔後再下載(已解決)

如提,我用php產生pdf檔案,該檔案會隨著使用者編輯而重新產生。

使用者一直反映說不管怎麼編輯都是舊的檔案,看不到有編輯修改後的內容

請他們ctrl + F5時有效時沒效,要清除瀏覽器的圖片與檔案暫存後下載才會看到新的~~
但使用者連ctrl+F5都不會...(大概有一半的人XD)

想問一下各位前輩們~~~
解決這個問題除了在檔名加上亂碼外,有沒有辦法可以讓使用者下載的時候,讓瀏覽器不要從暫存拿檔案,而是真的下載呢?


感謝各位前輩的解答,解法有下面幾種

1.從header中解決 ( ccutmis提供)

從PHP或HTML解決都可以

PHP

header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");

HTML

<meta http-equiv="expires" content="Sun, 01 Jan 2014 00:00:00 GMT"/>
<meta http-equiv="pragma" content="no-cache" />

2.在請求的網址加上隨機數(浩瀚星空、dragonH 提供)(我用這個解決問題)

只要讓連結不一樣就可以了~~
http: //abc.com/test.pdf?< ? php echo time();?>
https: //abc.com/test.pdf?v=[隨機數]

3.若是透過jquery ajax (dragonH提供)

補上 cache:false

ccutmis iT邦研究生 4 級 ‧ 2019-05-15 16:35:34 檢舉
https://stackoverflow.com/questions/13640109/how-to-prevent-browser-cache-for-php-site
舜~ iT邦新手 3 級 ‧ 2019-05-15 17:26:11 檢舉
謝謝~

2 個回答

1
dragonH
iT邦新手 5 級 ‧ 2019-05-15 16:38:19

如果你確定是快取的問題

1 .
如果是使用 jquery ajax

補上

cache:false

2 .
在請求的網址加上隨機數

ex:

`https://yoururl?v=${Date.now()}`
舜~ iT邦新手 3 級 ‧ 2019-05-15 17:26:20 檢舉

謝謝~

1
浩瀚星空
iT邦高手 1 級 ‧ 2019-05-15 16:44:57

教你一招萬用機制。

如讀取的域名是 http://abc.com/test.pdf
利用程式在其域名讀取後面再加上

http://abc.com/test.pdf?<?php echo time();?> 

或是 time()換成rand(111111,999999)

這樣瀏覽器就會將其視為新頁會重新下載。

舜~ iT邦新手 3 級 ‧ 2019-05-15 17:31:17 檢舉

謝謝前輩~~

我要發表回答

立即登入回答