2013-02-21 56 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