Кэширование XML-канала с удаленного URL - PullRequest
2 голосов
/ 07 декабря 2010

Я использую удаленный 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.

Ответы [ 5 ]

4 голосов
/ 07 декабря 2010

Вот простое решение:

Проверьте последний раз, когда ваш локальный файл 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...
}
4 голосов
/ 07 декабря 2010
<?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/

1 голос
/ 11 сентября 2013
$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;
0 голосов
/ 27 апреля 2012

Я создал простой класс PHP для решения этой проблемы.Так как я имею дело с различными источниками, он может обрабатывать все, что вы к нему добавляете (xml, json и т. Д.).Вы даете ему локальное имя файла (для целей хранения), внешний канал и время истечения.Он начинается с проверки локального файла.Если он существует и срок его действия не истек, он возвращает содержимое.Если срок его действия истек, он пытается получить удаленный файл.Если есть проблема с удаленным файлом, он будет возвращен к кешированному файлу.

Сообщение в блоге здесь: http://weedygarden.net/2012/04/simple-feed-caching-with-php/ Код здесь: https://github.com/erunyon/FeedCache

0 голосов
/ 07 декабря 2010
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...