如何在PHP中缓存网页?

时间:2009-10-10 08:22:39

标签: php caching

如何在php中缓存网页,以便在页面未更新时,查看者应该获得缓存副本?

感谢您的帮助。 PS:我是php的初学者。

6 个答案:

答案 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包(第一个)进行查询缓存,当时它就是我记得的。