Php 为访问者清除开发后的缓存

Php 为访问者清除开发后的缓存,php,javascript,caching,Php,Javascript,Caching,我正在开发网站,一些访问者的浏览器显示为旧缓存 有没有一种方法可以使用服务器端的代码甚至javascript清除访问者的浏览器缓存,这样他们就不必自己清除 我找不到直接的答案 像Facebook、Ebay等大公司肯定有办法,我们一直在使用htaccess来确定客户端的缓存规则。我们明确地给缓存一个24小时的生存期,并且在更新的前一天没有设置缓存规则。它有帮助,但它是乏味的,不那么可靠 如果没有人回答的话,我只是想给你一些想法,但我也很想得到答案。:) 第一种方法: 实际上,您可以在结束脚本之前保

我正在开发网站,一些访问者的浏览器显示为旧缓存

有没有一种方法可以使用服务器端的代码甚至javascript清除访问者的浏览器缓存,这样他们就不必自己清除

我找不到直接的答案


像Facebook、Ebay等大公司肯定有办法,我们一直在使用htaccess来确定客户端的缓存规则。我们明确地给缓存一个24小时的生存期,并且在更新的前一天没有设置缓存规则。它有帮助,但它是乏味的,不那么可靠


如果没有人回答的话,我只是想给你一些想法,但我也很想得到答案。:)

第一种方法:

实际上,您可以在结束脚本之前保存页面的输出,然后在脚本开始时加载缓存

示例代码:

<?php

$cachefile = 'cache/'.basename($_SERVER['PHP_SELF']).'.cache'; // e.g. cache/index.php.cache
$cachetime = 3600; // time to cache in seconds

if(file_exists($cachefile) && time()-$cachetime <= filemtime($cachefile)){
  $c = @file_get_contents($cf);
  echo $c;
  exit;
}else{
  unlink($cachefile);
}

ob_start();

// all the coding goes here

$c = ob_get_contents();
file_put_contents($cachefile);

?>

实际上,您可以在结束脚本之前保存页面的输出,然后在脚本开始时加载缓存

示例代码:

<?php

$cachefile = 'cache/'.basename($_SERVER['PHP_SELF']).'.cache'; // e.g. cache/index.php.cache
$cachetime = 3600; // time to cache in seconds

if(file_exists($cachefile) && time()-$cachetime <= filemtime($cachefile)){
  $c = @file_get_contents($cf);
  echo $c;
  exit;
}else{
  unlink($cachefile);
}

ob_start();

// all the coding goes here

$c = ob_get_contents();
file_put_contents($cachefile);

?>
如果有很多页面需要此缓存,可以执行以下操作:

在cachestart.php中:

在cacheend.php中:

<?php

$c = ob_get_contents();
file_put_contents($cachefile);

?>

然后简单地加上

包括('cachestart.php'); 在脚本开始时。加

包括('cacheend.php'); 在脚本的末尾。记住要有一个名为cache的文件夹,并允许PHP访问它

还请记住,如果要进行完整页面缓存,则页面不应具有特定于会话的显示(例如,显示成员栏或其他内容),因为它们也将被缓存。查看特定缓存的框架(变量或页面的一部分)

第二种方法:

使用Squid或正确更新HTTP头来执行浏览器缓存

PEAR有一个缓存包(实际上有两个):

第四种方法:


使用。在那个网站上有一个关于如何做这件事的解释。

我通常结合使用以下技术:

  • PHP代码生成的HTML不会使用标准配置进行缓存,因为它会自动发送相应的头
  • 如果图像和其他二进制资产发生更改,它们将被重命名
  • 对于JavaScript和CSS,我在文件名(例如
    /public/styles.f782bed8.CSS
    )中添加了一个自动创建的唯一代码(例如内容或文件大小的MD5散列),并使用mod_rewrite再次删除它。这样,文件中的每次更改都会产生一个新的文件名。这可以在运行时在PHP中完成,同时输出HTML头,使其完全自动化。然而,在这种情况下,MD5可能会对性能产生影响
看看这个问题: