2013-02-21 59 views
6

我想在PHP文件(styles.php)中創建樣式表,使樣式表變成動態的,具體取決於請求的用戶。對於每個單獨的用戶,樣式表都是不變的,因此應該在他的客戶端瀏覽器上進行緩存。讓瀏覽器緩存我的動態PHP樣式表

我讀過,你可以通過設置內容類型和緩存控制等頭來實現這一點,但我不能得到這個工作。顯然還有更多,也許這不可能。瀏覽器似乎並不總是傾聽緩存標題。

有誰知道什麼是需要讓PHP文件緩存在瀏覽器中?

我不想將所有動態CSS放在HTML中的樣式塊中,我不想爲此更改我的Apache配置。如果真的不可能我想要的,我也想知道。謝謝!

+0

什麼是影響樣式表的因素是什麼?用戶是否可以配置樣式表?或者你創建一個隨機的? – 2013-02-21 10:30:58

+0

我們的系統有很多模塊,並且有一箇中央web服務爲返回的登錄用戶返回一些樣式設置。對我而言,它們是隨機的,但顯然它們與某些用戶細節(如它所屬的組)有關。 – 2013-02-21 10:49:43

+0

所以你使用php會話時,你的風格腳本被稱爲?如果是這種情況,這很可能是你的問題。我現在無法檢查,但如果我記得正確的PHP默認情況下覆蓋您的緩存頭,如果您使用會話。因此請檢查瀏覽器收到的樣式表標題。 – 2013-02-21 11:16:23

回答

0

這似乎是相似的,請檢查。

Cache Headers for dynamic Css

+0

,因爲它聽起來像他想要從用戶到用戶區分樣式表,這實際上是一個不同的問題。然後緩存控制不應該是「公共」,而是「私人」(http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.1) – 2013-02-21 10:33:07

+0

然而,我已經看到了這個頁面,試過了。不幸的是,瀏覽器不斷檢索php樣式表。 – 2013-02-21 10:43:43

+0

你也嘗試過頭('Cache-Control:max-age = 86400') – Ankit 2013-02-21 10:48:28

10

這些標題應該很好地工作:

$expires = 60*60*24; // how long to cache in secs.. 
header("Pragma: public"); 
header("Cache-Control: maxage=".$expires); 
header('Expires: ' . gmdate('D, d M Y H:i:s', time()+$expires) . ' GMT'); 
header('Content-type: text/css'); 
+0

在Wordpress中使用動態CSS樣式表的問題剛剛相同,並且上面修復了它!謝謝 :) – ss888 2013-02-21 16:13:14