【问题标题】:No cache for some html pages某些 html 页面没有缓存
【发布时间】:2014-04-28 03:23:59
【问题描述】:

我有一个代码,每次用新内容填充一个 HTML 文件,这个文件在我的网站上被调用...但是当我更改文件内容然后转到我的页面时,页面显示旧内容而不是新内容。我只有 2 页我这样做,其他的都是静态的。

我怎样才能为这 2 个文件设置一个“非缓存”?

我的代码是这样的:

<?php
$fp = fopen('file.html', 'w');
fwrite($fp, $content);
fclose($fp);
?>

在另一个 file.php 我有

<html>
<head>...</head>
<body>
<some html>
<?php include(file.html); ?>
<some html>
</body>
</html>

谢谢,

【问题讨论】:

  • 取决于缓存它的内容。您是否使用服务器端缓存?还是依赖浏览器?
  • 依赖浏览器。我有一个运行 apache 的 linux。
  • 你是如何缓存的?您可以发布一些代码供我们审核吗?

标签: php html caching refresh no-cache


【解决方案1】:

确保为该文件发送了一个标头,指定它不应被缓存;像这样的标题:

Cache-Control: max-age=0, no-cache, no-store, must-revalidate
Pragma: no-cache
Expires: Fri, 20 Mar 2014 00:00:00 GMT

如果这些文件是 PHP 文件,您可以通过在顶部添加这样的一行来做到这一点:

<?php
header('Cache-Control: max-age=0, no-cache, no-store, must-revalidate');
header('Pragma: no-cache');
header('Expires: Fri, 20 Mar 2014 00:00:00 GMT');
?>

我这里之所以使用多个header,是因为有多种方式来控制缓存;如果你真的想确保它从不被缓存,你应该禁用所有表单(这种方式)。

如果它们是纯 HTML 文件,那么您需要使用一些 .htaccess 魔法,如 this answer (add a header to each request using htaccess) 中所述

为清楚起见,如下所示:

  • 在你的file.html目录下创建一个.htaccess文件
  • 将以下内容放入此 .htaccess 文件中:

代码:

<files "file.html">
    Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
    Header set Pragma "no-cache"
    Header set Expires "Fri, 20 Mar 2014 00:00:00 GMT"
</Files>

【讨论】:

  • 问题是,我正在生成 .html,读取数据并将其放在 $var 上,然后使用 fwrite($file,$var); 将其写入 file.html;如果我使用 PHP 设置标头,我将设置 filewriter.php 标头而不是 file.html。我看到了 htaccess,但它只有 ExpireByType html/css 用于每个 html 文件,而不仅仅是我正在寻找的那两个文件干杯
  • 您始终可以使用&lt;Files "x.html"&gt; Header add ... &lt;/Files&gt; 将其限制为仅单个(或几个)文件,如Apache Documentation 中所述
  • 是的,但它不只有“Expire”,它有 ExpireDefault 和 ExpireByType link 或者如果我只是放 ExpiresDefault "access plus 6 hours" 是否会为文件设置默认过期时间?如果我只是添加 ExpiresByType text/html“修改加 6 小时”并且我修改(通过 fwrite)它会在 6 小时后过期缓存吗?
  • 谢谢@Tularis我实际上并没有按照你说的做,但是我做了这个并且它在ExpiresByType text/html M0上有效,因为它们被修改了,这正是我正在寻找的干杯
  • 是的,记住"Expire" 是一个标头,而ExpireDefault 是一个setting,然后它会自动生成一个expire-标头。使用我发布的方法,过期日期是过去的,所以它会总是不缓存文档。
猜你喜欢
  • 1970-01-01
  • 2012-02-10
  • 2012-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-01
相关资源
最近更新 更多