如何在调用新数据之前缓存服务器调用并测试缓存过期?

时间:2011-12-17 19:12:31

标签: php caching

我正在使用此脚本来检索Google网络字体列表。如何缓存结果并使用它来确定是从缓存还是服务器调用加载?

$googleFontsArray = array();
$googleFontsArrayContents = file_get_contents('http://phat-reaction.com/googlefonts.php?format=php');
$googleFontsArrayContentsArr = unserialize($googleFontsArrayContents);

foreach($googleFontsArrayContentsArr as $font)
{
    $googleFontsArray[$font['font-name']] = $font['font-name'];
}

2 个答案:

答案 0 :(得分:2)

您可以制作序列化数据的本地副本,并且每小时只更新一次文件:

$cache_file = 'font_cache';

$update_cache = false;
$source = $cache_file;
if(!file_exists($cache_file) || time() - filemtime($cache_file) >= 3600) // Cache for an hour
{
     $source = 'http://phat-reaction.com/googlefonts.php?format=php';
     $update_cache = true;
}

$googleFontsArray = array();
$googleFontsArrayContents = file_get_contents($source);
$googleFontsArrayContentsArr = unserialize($googleFontsArrayContents);

foreach($googleFontsArrayContentsArr as $font)
{
    $googleFontsArray[$font['font-name']] = $font['font-name'];
}

if($update_cache)
{
    file_put_contents($cache_file, $googleFontsArrayContents);
}

答案 1 :(得分:0)

我认为只要Google网络字体文件发生变化,您就会想要进行服务器调用。这在一个脚本中实际上是不可能的。理想情况下,您将拥有另一个仅查询和缓存字体列表的脚本,此处列出的代码将始终使用缓存值。