如何在php中缓存网页,以便在页面未更新时,查看者应该获得缓存副本?
感谢您的帮助。 PS:我是php的初学者。
答案 0 :(得分:14)
在结束脚本之前,您实际上可以保存页面的输出,然后在脚本的开头加载缓存。
示例代码:
<?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
中的:
<?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();
?>
cacheend.php
中的:
<?php
$c = ob_get_contents();
file_put_contents($cachefile);
?>
然后只需添加
即可include('cachestart.php');
在脚本的开头。并添加
include('cacheend.php');
在脚本的末尾。记住要有一个名为 cache 的文件夹,并允许PHP访问它。
另外请记住,如果您正在进行整页缓存,则您的页面不应具有特定于SESSION的显示(例如,显示成员的栏或内容),因为它们也将被缓存。查看特定缓存的框架(变量或页面的一部分)。
答案 1 :(得分:4)
除了mauris的回答,我想指出这一点:
使用缓存时必须小心。当你有动态数据时(当你使用php而不是静态html时应该是这种情况),那么当相应的数据发生变化时你必须使缓存无效。
这可能非常简单或非常棘手,具体取决于您的动态数据类型。
更新
如何使缓存失效取决于具体的缓存类型。您必须知道哪些缓存文件属于哪个页面(可能还有用户输入)。当数据发生更改时,您应该删除缓存的文件或从缓存数据结构中删除页面输出。
如果不知道您使用哪种实现进行缓存,我无法向您提供更详细的信息。
其他人建议例如Pear包或memcached。它们具有必要的功能,可在数据更改时使整个缓存或部分缓存无效。
答案 2 :(得分:3)
$c = ob_get_contents();
file_put_contents($cachefile);
正确
$c = ob_get_contents();
file_put_contents($cachefile,$c);
否则脚本将无效。
答案 3 :(得分:0)
使用memcached。有关如何在该网站上进行此操作的说明。
答案 4 :(得分:0)
使用Squid或正确更新HTTP标头以执行浏览器缓存。我不认为有必要根据问题调整自己的缓存版本。
答案 5 :(得分:0)
PEAR有一个缓存包(实际上是两个):
http://pear.php.net/package/Cache和
http://pear.php.net/package/Cache_Lite适用于较小的应用
我曾经使用Cache包(第一个)进行查询缓存,当时它就是我记得的。