在php中缓存动态css文件

时间:2014-12-09 13:51:00

标签: php css caching

我有一个 style.php 文件,其中包含一些允许管理员更改某些颜色的变量

在style.php文件中,我以这种方式添加了缓存

<?php 
$variables = array('#CCC','#800'); // from db
header('Cache-control: max-age=86400, public, must-revalidate');
header('Expires: '.gmdate('D, d M Y H:i:s',time()+86400).' GMT');
header('Last-Modified: '.gmdate('D, d M Y H:i:s',filemtime('style.php')).' GMT');
?>
body{ background: <?php echo $variables[0]; ?>; }

一切正常,缓存,除了当用户更改变量时,style.php不是真实的(但总是缓存)。

似乎错误是 filemtime('style.php')中的最后修改的标题,它告诉浏览器仅在此文件时重新加载CSS是经过编辑的 ...

CONTENT 发生变化时,是否可以告诉浏览器重新加载style.css?例如,当$variabile[0]#CCC更改为#FFF

1 个答案:

答案 0 :(得分:0)

这可能是一种奇怪的方式,但我唯一可以想到的就是我的头脑。

通过在样式更新时更新版本号来创建版本控制,然后将其作为查询字符串附加

在你的style.php中:

<?php
    $variables = array('#CCC','#800'); // or whatever is pulled from your db
?>

body{ background: <?php echo $variables[0]; ?>; }

并在您的实际页面中

<?php
    $version = 'pulled from your db'; // this would be a number, updated whenever values change

    // somewhere in your head
    <link type="text/css" href="style.php?v=<php print $version; ?>" />
?>

这样,每个版本都单独缓存,但会随变量更改重置。你不应该做你要做的所有标题设置,仅此一点就足够了。

只是一个想法。抬头,这不会像IE6这样的石器时代浏览器一起工作......他们根本不会使用查询字符串来缓存任何内容。