如何在PHP中缓存网页?

2022-08-31 00:54:36

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

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


答案 1

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

示例代码:

<?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($cachefile);
  echo $c;
  exit;
} else {
  unlink($cachefile);
}

ob_start();

// all the coding goes here

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

?>

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

在: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($cachefile);
  echo $c;
  exit;
} else {
  unlink($cachefile);
}

ob_start();
?>

在:cacheend.php

<?php

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

?>

然后只需添加

include('cachestart.php');

在脚本的开头。并添加

include('cacheend.php');

在脚本的末尾。请记住有一个名为 cache 的文件夹,并允许 PHP 访问它。

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


答案 2

除了mauris的答案,我想指出这一点:

使用缓存时必须小心。当你有动态数据时(当你使用php而不是静态html时应该是这种情况),那么当相应的数据发生变化时,你必须使缓存失效。

这可能非常简单或非常棘手,具体取决于您的动态数据类型。

更新

如何使缓存失效取决于具体的缓存类型。您必须知道哪些缓存文件属于哪个页面(可能还有用户输入)。当数据更改时,应删除缓存的文件或从缓存数据结构中删除页面输出。

在不知道您使用哪个实现进行缓存的情况下,我无法为您提供有关该内容的更多详细信息。

其他人建议例如梨包装或memcached。它们具有必要的功能,可在数据更改时使整个缓存或其部分失效。


推荐