Php 缓存来自远程URL的XML源

Php 缓存来自远程URL的XML源,php,xml,caching,Php,Xml,Caching,我正在使用一个远程xml提要,我不想每次都点击它。这是我目前掌握的代码: $feed = simplexml_load_file('http://remoteserviceurlhere'); if ($feed){ $feed->asXML('feed.xml'); } elseif (file_exists('feed.xml')){ $feed = simplexml_load_file('feed.xml'); }else{ die('No available

我正在使用一个远程xml提要,我不想每次都点击它。这是我目前掌握的代码:

$feed = simplexml_load_file('http://remoteserviceurlhere');
if ($feed){
  $feed->asXML('feed.xml');
}
elseif (file_exists('feed.xml')){
    $feed = simplexml_load_file('feed.xml');
}else{
    die('No available feed');
}
我想做的是让我的脚本每小时访问一次远程服务,并将数据缓存到feed.xml文件中。

set('feed.xml',$feed);
<?php

$cache = new JG_Cache();
if(!($feed = $cache->get('feed.xml', 3600))) {
     $feed = simplexml_load_file('http://remoteserviceurlhere');
     $cache->set('feed.xml', $feed);
}
}

使用任何基于文件的缓存机制,例如

看看。

这里有一个简单的解决方案:

检查上次修改本地
feed.xml
文件的时间。如果当前时间戳与
filemtime
时间戳之间的差异大于3600秒,请更新文件:

$feed_updated = filemtime('feed.xml');
$current_time = time();

if($current_time - $feed_updated >= 3600) {

         // Your sample code here...

} else {

       // use cached feed...
}

我创建了一个简单的PHP类来解决这个问题。因为我处理的是各种各样的源代码,所以它可以处理您向它抛出的任何东西(xml、json等)。您给它一个本地文件名(用于存储)、外部提要和过期时间。它首先检查本地文件。如果它存在且未过期,则返回内容。如果已过期,它将尝试获取远程文件。如果远程文件出现问题,它将返回到缓存文件

博文如下:
这里的代码:

您的问题具体是关于该操作的哪一部分?
$feedmtime = filemtime('feed.xml');
$current_time = time();
if(!file_exists('feed.xml') || ($current_time - $feedmtime >= 3600)){
    $feed = simplexml_load_file($url);
    $feed->asXML('feed.xml');
 }else{
    $feed = simplexml_load_file('feed.xml');
 }
 return $feed;