繁体   English   中英

从远程URL缓存XML Feed

[英]Cache an XML feed from a remote URL

我使用远程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文件中。

<?php

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

使用任何基于文件的缓存机制,例如http://www.jongales.com/blog/2009/02/18/simple-file-based-php-cache-class/

这是一个简单的解决方案:

检查上次修改本地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...
}
$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;

我创建了一个简单的PHP类来解决这个问题。 由于我正在处理各种来源,它可以处理你扔的任何东西(xml,json等)。 您为其提供本地文件名(用于存储目的),外部订阅源和到期时间。 它首先检查本地文件。 如果它存在且尚未过期,则返回内容。 如果它已过期,它会尝试获取远程文件。 如果远程文件存在问题,它将回退到缓存文件。

博客文章: http//weedygarden.net/2012/04/simple-feed-caching-with-php/此处代码: https//github.com/erunyon/FeedCache

看一下Simple PHP缓存

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM