2010-12-06 8 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

その操作のどの部分を正確にについての質問ですか? –

答えて

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; 
関連する問題