缓存 PHP 中的动态 CSS 文件


cache for a dynamic css file in php

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

在样式.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]; ?>; }

一切都有效,缓存也是如此,除了当用户更改变量时,样式.php不会重新加载(但始终缓存)。

似乎错误是最后修改的标头filemtime('style.php'),它告诉浏览器只有在对该文件进行物理编辑时才重新加载 CSS......

是否可以告诉浏览器重新加载样式.css当内容更改时?例如,当$variabile[0]#CCC更改为#FFF时?

这可能是一种奇怪的方法,但我唯一能想到的事情。

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

按照您的风格.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这样的石器时代浏览器......它们根本不使用查询字符串缓存任何内容。