缓存PHP内容的建议

时间:2012-08-21 17:45:58

标签: php caching

所以我的网站开始使用太多资源。我的网站的核心是vbulletin的编码错误的插件。不幸的是,切换并不容易,所以我只需要尝试重写一些东西,但最重要的是: 附加不同参数的主页面会占用过多的处理能力,如?image.php?id = 1和?image.php?id = 2 ..等等。

无论如何,我需要一些东西,我可以用它来为每个id在html中缓存这些页面,它们并不经常改变,只有在发布评论时才会每次加载它们都没用。 我以前从未使用过类似的东西,因此非常欢迎使用任何提示,提示和软件

编辑:我问的原因是因为我的主机上的处理器使用量开始变高,如果我吸引更多访问者,我可能会被暂停。

编辑:我在考虑一个类似这样的系统:如果日期比保存为html的最后一个缓存版本旧,那么其中包含每个?id的数据库和上次修改的日期(如添加评论或其他内容),加载html,否则运行php脚本并生成一个新的缓存html。 我可能不得不自己制作这样的东西,我猜想,不太确定如何开始这样的事情。

3 个答案:

答案 0 :(得分:0)

您可以在最顶层的image.php中添加这些

header("Cache-Control: private, max-age=10800, pre-check=10800");
header("Pragma: private");
header("Expires: " . date(DATE_RFC822, strtotime("2 day")));

if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {

    header('Last-Modified: ' . $_SERVER['HTTP_IF_MODIFIED_SINCE'], true, 304);
    exit;
}

答案 1 :(得分:0)

现在你的真正问题在哪里?数据库调用或提供静态内容?

听起来像你应该从使用本地文件系统的简单缓存开始。 你可以缓存你提到的最慢的页面吗?如果是这样,您可以编写自己的简单缓存代码,只需将文件写入磁盘并在未过期/无效时从那里加载。

还有其他东西,比如APC,memcaced,这对你也有帮助。快速谷歌搜索将为您提供最低价格。

答案 2 :(得分:0)

你可以为客户端缓存实现上面的代码,因为对于服务器端你可以存储处理过的(如果vbulletin做图像/调整大小/裁剪等因素导致高内存使用)图像到文件中(在某些缓存目录中)因此,每次调用脚本时,PHP都不必处理它们。

算法本身应该包括散列vbulletin所需的$ _GET参数,例如id=2width=250height=250

所以代码会像...那样的东西。

$file = 'cache_dir/'.md5('file_cached_'.$_GET['id'].'_w'.$_GET['width'].'_h'.$_GET['height']).'.jpg';
if ( ! file_exists($file))
{

  $image = get_image_by_id($_GET['id']);

  // this is just example...
  $image_blob = vbulletin_heavy_image_processing($image);

  file_put_contents($file, $image_blob);
  echo $image_blob;
}
else 
{
  echo file_get_contents($file);
}