2012-11-30 134 views
68

我有一個php站點運行在雲server.When我添加新文件css,js或圖像瀏覽器正在加載相同的舊的js,css和圖像文件存儲在緩存中。如何防止瀏覽器緩存爲PHP網站

我的網站有一個DOCTYPE和meta標籤,如下

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> 
    <meta http-equiv="Page-Enter" content="blendTrans(Duration=1.0)"> 
    <meta http-equiv="Page-Exit" content="blendTrans(Duration=1.0)"> 
    <meta http-equiv="Site-Enter" content="blendTrans(Duration=1.0)"> 
    <meta http-equiv="Site-Exit" content="blendTrans(Duration=1.0)"> 

由於上述文檔類型和元碼的我是裝的瀏覽器,而不是新的

+0

['所有Browsers'沒有緩存(HTTP://計算器。COM /問題/ 1341089 /使用的元標籤到關閉緩存功能於所有的瀏覽器)。你也可以對你不希望被緩存的文件執行一個?randomGeneratedNumber。 – Kodemon

+0

您可能不想完全禁用圖像/ js/css的緩存:http://stackoverflow.com/questions/4206224/better-way-to-prevent-browser-caching-of-javascript-files – FoolishSeth

回答

169

緩存相同的文件試試這個

<?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"); 
?> 
+2

感謝回覆 – ArrayOutOfBound

+5

除了「max-age = 0」之外,這些是由PHP發送的頭文件,未在我的安裝中指定上述內容..似乎PHP會默認阻止瀏覽器緩存... –

+0

您已經將許多我們的我,謝謝你! –

21

在這裏,如果你想通過HTML來控制它:做類似下面選項1:

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

如果你想通過PHP來控制它:做到像下面選項2:

header('Expires: Sun, 01 Jan 2014 00:00:00 GMT'); 
header('Cache-Control: no-store, no-cache, must-revalidate'); 
header('Cache-Control: post-check=0, pre-check=0', FALSE); 
header('Pragma: no-cache'); 

選項2是爲了避免基於代理緩存的問題總是更好。

5

你可以試試這個:

header("Expires: Tue, 03 Jul 2001 06:00:00 GMT"); 
    header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); 
    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"); 
    header("Connection: close"); 

希望這將有助於防止緩存,如果有的話!

+0

這隻適用於HTML文件的緩存嗎?與eTag無關?謝謝! –

+1

只是第一行應該足夠完美。第5行實際上是錯誤的,並且在服務器響應中無關(它是請求標題)。第六行將不起作用。我可以繼續... –

+0

請做 - 令人興奮 – pee2pee

2

我有緩存我的css文件的問題。在PHP中設置標題並沒有幫助我(可能是因爲標題需要在樣式表文件中設置,而不是鏈接到它的頁面?)。

,我發現這個頁面上的解決方案:https://css-tricks.com/can-we-prevent-css-caching/

解決辦法:

追加時間戳的URI爲鏈接文件的查詢部分。
(可用於CSS,JS,圖片等)

促進發展:

<link rel="stylesheet" href="style.css?<?php echo date('Y-m-d_H:i:s'); ?>">

對於生產(其中高速緩存大多是一件好事):

<link rel="stylesheet" type="text/css" href="style.css?version=3.2">
(並且在需要時手動重寫)

或者這兩者的組合:

<?php 
    define("DEBUGGING", true); // or false in production enviroment 
?> 
<!-- ... --> 
<link rel="stylesheet" type="text/css" href="style.css?version=3.2<?php echo (DEBUGGING) ? date('_Y-m-d_H:i:s') : ""; ?>"> 

編輯:這兩個的

或者漂亮的組合:

<?php 
    // Init 
    define("DEBUGGING", true); // or false in production enviroment 
    // Functions 
    function get_cache_prevent_string($always = false) { 
     return (DEBUGGING || $always) ? date('_Y-m-d_H:i:s') : ""; 
    } 
?> 
<!-- ... --> 
<link rel="stylesheet" type="text/css" href="style.css?version=3.2<?php echo get_cache_prevent_string(); ?>"> 
相關問題