Php 为访问者清除开发后的缓存
我正在开发网站,一些访问者的浏览器显示为旧缓存 有没有一种方法可以使用服务器端的代码甚至javascript清除访问者的浏览器缓存,这样他们就不必自己清除 我找不到直接的答案Php 为访问者清除开发后的缓存,php,javascript,caching,Php,Javascript,Caching,我正在开发网站,一些访问者的浏览器显示为旧缓存 有没有一种方法可以使用服务器端的代码甚至javascript清除访问者的浏览器缓存,这样他们就不必自己清除 我找不到直接的答案 像Facebook、Ebay等大公司肯定有办法,我们一直在使用htaccess来确定客户端的缓存规则。我们明确地给缓存一个24小时的生存期,并且在更新的前一天没有设置缓存规则。它有帮助,但它是乏味的,不那么可靠 如果没有人回答的话,我只是想给你一些想法,但我也很想得到答案。:) 第一种方法: 实际上,您可以在结束脚本之前保
像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,我在文件名(例如
)中添加了一个自动创建的唯一代码(例如内容或文件大小的MD5散列),并使用mod_rewrite再次删除它。这样,文件中的每次更改都会产生一个新的文件名。这可以在运行时在PHP中完成,同时输出HTML头,使其完全自动化。然而,在这种情况下,MD5可能会对性能产生影响/public/styles.f782bed8.CSS