如何在PHP中缓存XML文件?

3
我正在从远程服务器获取一个包含相对静态数据的XML文件。以下是我的代码:
$dom = simplexml_load_file("foo.xml");

foreach ($dom->bar->baz as $item) {
echo $item;
}

由于数据很少更改,因此没有必要在每次页面加载时ping服务器...如何以简单的方式缓存foo.xml?请记住,我是一个初学者...

谢谢!

1个回答

10
一个非常简单的缓存方法是将xml文件存储到一个目录中,并每小时更新一次。
$cacheName = 'somefile.xml.cache';
// generate the cache version if it doesn't exist or it's too old!
$ageInSeconds = 3600; // one hour
if(!file_exists($cacheName) || filemtime($cacheName) > time() + $ageInSeconds) {
  $contents = file_get_contents('http://www.something.com/foo.xml');
  file_put_contents($cacheName, $contents);
}

$dom = simplexml_load_file($cacheName);
// ...

注意:当然还要假设一些情况,比如文件成功生成,远程文件成功下载等等。

如果两个不同的用户使用不同的计算机访问页面,并且使用不同的参数,会发生什么? - Harish Kumar
不要忘记在使用filemtime()函数时使用clearstatcache() - Volomike
为什么不使用 time() - filemtime($cacheName) >= $ageInSeconds - l2aelba
只是一条评论,多年以后——正如答案中所述,缓存永远不会触发,因为时间比较是反向的。你需要使用上面评论中的时间比较。 - FoulFoot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接