簡體   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