2015-06-16 87 views
1

許多PHP開發人員在他們的PHP頁面頂部添加了no-cache標頭,因此我也是如此,原因很明顯。由於PHP生成的內容通常是動態的,因此瀏覽器緩存它們會導致過時的數據呈現給用戶。爲了避免這種緩存通常被禁用。PHP如何不緩存生成的HTML,但緩存靜態數據,如圖像/ js/css

<?php 
    //no cache headers 
    header("Expires: Mon, 26 Jul 1990 05:00:00 GMT"); 
    header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); 
    header("Cache-Control: no-store, no-cache, must-revalidate"); 
    header("Cache-Control: post-check=0, pre-check=0", false); 
    header("Pragma: no-cache"); 
?> 

的問題是,由於這個頭,也是我的圖像,JavaScript文件和CSS文件,這是靜態的,因此可以(也應該)被緩存,也不會被緩存。這使網站變慢了很多。

有沒有辦法讓PHP內容沒有緩存,但仍然有緩存js/images/css?

假設我完全可以修改(linux)服務器配置,HTACCESS,當然還有PHP文件本身,這怎麼能實現呢?

或者是動態PHP文件不需要的整個「no-cache thing」?甚至當它們被url重寫爲無擴展時。

+0

已經有'header(「Expires:Mon,1990年7月26日05:00:00 GMT」);'對嗎? –

+0

是的,因爲我發佈了,爲什麼? –

+0

對不起,我感到困惑。別介意我的評論! –

回答

0

你可以使用.htaccess指定要緩存 所有你想要的是讓一個.htaccess文件在你的網站的主目錄,並添加以下代碼

示例文件:

# cache images/pdf docs for 1 week 
<FilesMatch "\.(ico|pdf|jpg|jpeg|png|gif)$"> 
    Header set Cache-Control "max-age=604800, public, must-revalidate" 
    Header unset Last-Modified 
</FilesMatch> 

# cache html/htm/xml/txt diles for 2 days 
<FilesMatch "\.(css|js)$"> 
    Header set Cache-Control "max-age=172800, must-revalidate" 
</FilesMatch> 
+1

我認爲他意識到他只是想用php做到這一點。 – DCdaz

+0

是的,我已經這樣做,但它感覺哈克。我只是想知道是否存在一種更清潔的方式。 –

2

我可能是錯的,但我beleive你可以把你所有的JS和CSS文件到一個單一的PHP,然後緩存,採用類似

ob_start ("ob_gzhandler"); 
ob_start("compress"); 

所以,你會具有.php的定義它的頭,然後一些需要你的js和css文件,也是上面的。

您將probobly需要一對夫婦的if語句以皮卡的變化等

我會做出更全面的答案在數我我的手機上的時刻。


UPDATE

發現在git的資源,我認爲將幫助您設置在正確的道路。

https://github.com/SubZane/CSS-Compressor/blob/master/csscompressor.php

+0

謝謝,結合這些靜態文件將加速很多,也是我正在研究的東西。這可能會一次解決所有這些問題。我一定會研究這個。 –

+0

好很高興你排序的隊友。 – DCdaz

+0

您的解決方案適用於js和css文件,但對於圖像我想我仍然必須使用mohamed amin的解決方案。 –