如何在PHP中缓存网页?
如何在php中缓存网页,以便如果页面尚未更新,查看者应该获得缓存的副本?
感谢您的帮助。PS:我是php的初学者。
如何在php中缓存网页,以便如果页面尚未更新,查看者应该获得缓存的副本?
感谢您的帮助。PS:我是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();
// 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 访问它。
还要记住,如果您正在执行整页缓存,则您的页面不应具有特定于会话的显示(例如显示成员栏或其他内容),因为它们也会被缓存。查看特定缓存的框架(变量或页面的一部分)。
除了mauris的答案,我想指出这一点:
使用缓存时必须小心。当你有动态数据时(当你使用php而不是静态html时应该是这种情况),那么当相应的数据发生变化时,你必须使缓存失效。
这可能非常简单或非常棘手,具体取决于您的动态数据类型。
更新
如何使缓存失效取决于具体的缓存类型。您必须知道哪些缓存文件属于哪个页面(可能还有用户输入)。当数据更改时,应删除缓存的文件或从缓存数据结构中删除页面输出。
在不知道您使用哪个实现进行缓存的情况下,我无法为您提供有关该内容的更多详细信息。
其他人建议例如梨包装或memcached。它们具有必要的功能,可在数据更改时使整个缓存或其部分失效。