[英]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.