【问题标题】:cache for a dynamic css file in php在php中缓存动态css文件
【发布时间】:2014-12-09 22:06:09
【问题描述】:

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

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

<?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 不会重新加载(但总是缓存)。

似乎错误是 last-modified header in: filemtime('style.php') 告诉浏览器仅在此文件时才重新加载 CSS 经过物理编辑...

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

【问题讨论】:

    标签: php css caching


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2010-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-14
      • 2011-01-24
      • 2021-03-27
      • 2011-10-01
      • 1970-01-01
      相关资源
      最近更新 更多