如何在PHP中缓存XML文件?

如何在PHP中缓存XML文件?,php,xml,caching,Php,Xml,Caching,我正在从远程服务器获取一个XML文件,其中包含相当静态的数据。这是我的密码: $dom = simplexml_load_file("foo.xml"); foreach ($dom->bar->baz as $item) { echo $item; } 由于数据很少更改,因此无需在每次页面加载时ping服务器…如何以简单的方式缓存foo.xml?请记住,我是一个初学者 谢谢大家! 一个非常简单的缓存是将xml文件存储到一个目录中,并每小时左右更新一次 $cacheName =

我正在从远程服务器获取一个XML文件,其中包含相当静态的数据。这是我的密码:

$dom = simplexml_load_file("foo.xml");

foreach ($dom->bar->baz as $item) {
echo $item;
}
由于数据很少更改,因此无需在每次页面加载时ping服务器…如何以简单的方式缓存foo.xml?请记住,我是一个初学者


谢谢大家!

一个非常简单的缓存是将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);
// ...

注意:这当然假设文件已成功生成,远程文件已成功下载,等等。

如果两个不同的用户使用不同的计算机访问该页面,会发生什么情况?使用不同的参数?不要忘记使用
filemtime()
函数使用
clearstatcache()
。为什么不使用
time()-filemtime($cacheName)>=$ageUnseconds
?只是一个注释,很多年后——如答案中所述,缓存将永远不会触发,因为时间比较是向后的。您需要在上面的评论中使用时间比较。