PHP и AJAX: кешировать данные RSS - PullRequest
0 голосов
/ 12 октября 2011

Рассмотрим следующий вызов AJAX для загрузки новостей RSS по событию клика:

 $(function() {
            $(document).ready(function() {
                $('.msg_head').eq(0).click(function(){
                    $('.msg_body').eq(0).load('printSideNews.php');
                    $('.loadMessage').eq(2).hide();
                });
    });
});

printSideNews.php выглядит следующим образом:

include ('newsFeed.php');
  function printNewsMenu($itemD){
    for ($i = 0; $i < 4; $i++) {
            if($itemD==null)
            echo "An error has occured, please try again later";
            $article_title = $itemD[$i]->title;
            $article_link = $itemD[$i]->link;
            echo "<a href='".$article_link."' title='".$article_title."' target='_blank'>". $article_title. " </a></br>". PHP_EOL;
}
printNewsMenu($itemD);

Включенный файл newsFeed.php выглядит как:

$urlD = "someurl";
    $xmlD = simplexml_load_file($urlD);
    $itemD = $xmlD->channel->item;

Мне нужно кэшировать объект $itemD или $xmlD - не уверен, какой именно.Это должно быть кэшировано в течение 1 часа, а затем снова взято из URL.Будем весьма благодарны за любую помощь с кешированием кода в этом беспорядке.

1 Ответ

1 голос
/ 12 октября 2011

взгляните на эту функцию:

    <?php      
    function cacheObject($url,$name,$age = 86400)
      { 
        // directory in which to store cached files
        $cacheDir = "cache/";
        // cache filename constructed from MD5 hash of URL
        $filename = $cacheDir.$name;
        // default to fetch the file
        $cache = true;
        // but if the file exists, don't fetch if it is recent enough
        if (file_exists($filename))
        {
          $cache = (filemtime($filename) < (time()-$age));
        }
        // fetch the file if required
        if ($cache)
        {
          $xmlD = simplexml_load_file($url);
          $itemD = $xmlD->channel->item;
          file_put_contents($filename,serialize($itemD));
          // update timestamp to now
          touch($filename);
        }
        // return the cache filename
        return unserialize(file_get_contents($filename));
      }     


$urlD = "someurl";

$itemD = cacheObject($urlD,'cacheobject',3600);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...