2010-12-06 24 views
2

使用遠程xml訂閱源,我不想每次都點擊它。這是我的代碼至今:緩存來自遠程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文件。

+0

哪一部分該操作的是你的問題究竟? – 2010-12-06 22:33:27

回答

4

這裏有一個簡單的解決方案:

請查閱當地的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... 
} 
0

我創建了一個簡單的PHP類來解決這個問題。由於我正在處理各種來源,它可以處理任何你在它(xml,json等)的投入。您給它一個本地文件名(用於存儲目的),外部提要以及到期時間。它從檢查本地文件開始。如果它存在並且沒有過期,則返回內容。如果它已過期,它將嘗試獲取遠程文件。如果遠程文件存在問題,它將回退到緩存文件。

此處的博客文章:http://weedygarden.net/2012/04/simple-feed-caching-with-php/ 代碼在這裏:https://github.com/erunyon/FeedCache

1
$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;