Source for file rss_cache.inc

Documentation is available at rss_cache.inc

  1. <?php
  2. /*
  3.  * Project:     MagpieRSS: a simple RSS integration tool
  4.  * File:        rss_cache.inc, a simple, rolling(no GC), cache 
  5.  *              for RSS objects, keyed on URL.
  6.  * Author:      Kellan Elliott-McCrea <kellan@protest.net>
  7.  * Version:     0.51
  8.  * License:     GPL
  9.  *
  10.  * The lastest version of MagpieRSS can be obtained from:
  11.  * http://magpierss.sourceforge.net
  12.  *
  13.  * For questions, help, comments, discussion, etc., please join the
  14.  * Magpie mailing list:
  15.  * http://lists.sourceforge.net/lists/listinfo/magpierss-general
  16.  *
  17.  */
  18.  
  19. class RSSCache {
  20.     var $BASE_CACHE = './cache';    // where the cache files are stored
  21.     var $MAX_AGE    = 3600;         // when are files stale, default one hour
  22.     var $ERROR      = "";           // accumulate error messages
  23.     
  24.     function RSSCache ($base=''$age=''{
  25.         if $base {
  26.             $this->BASE_CACHE = $base;
  27.         }
  28.         if $age {
  29.             $this->MAX_AGE = $age;
  30.         }
  31.         
  32.         // attempt to make the cache directory
  33.         if file_exists$this->BASE_CACHE ) ) {
  34.             $status @mkdir$this->BASE_CACHE0755 );
  35.             
  36.             // if make failed 
  37.             if $status {
  38.                 $this->error(
  39.                     "Cache couldn't make dir '" $this->BASE_CACHE . "'."
  40.                 );
  41.             }
  42.         }
  43.     }
  44.     
  45. /*=======================================================================*\
  46.     Function:   set
  47.     Purpose:    add an item to the cache, keyed on url
  48.     Input:      url from wich the rss file was fetched
  49.     Output:     true on sucess  
  50. \*=======================================================================*/
  51.     function set ($url$rss{
  52.         $this->ERROR = "";
  53.         $cache_file $this->file_name$url );
  54.         $fp @fopen$cache_file'w' );
  55.         
  56.         if $fp {
  57.             $this->error(
  58.                 "Cache unable to open file for writing$cache_file"
  59.             );
  60.             return 0;
  61.         }
  62.         
  63.         
  64.         $data $this->serialize$rss );
  65.         fwrite$fp$data );
  66.         fclose$fp );
  67.         
  68.         return $cache_file;
  69.     }
  70.     
  71. /*=======================================================================*\
  72.     Function:   get
  73.     Purpose:    fetch an item from the cache
  74.     Input:      url from wich the rss file was fetched
  75.     Output:     cached object on HIT, false on MISS 
  76. \*=======================================================================*/ 
  77.     function get ($url{
  78.         $this->ERROR = "";
  79.         $cache_file $this->file_name$url );
  80.         
  81.         if file_exists$cache_file ) ) {
  82.             $this->debug
  83.                 "Cache doesn't contain$url (cache file$cache_file)"
  84.             );
  85.             return 0;
  86.         }
  87.         
  88.         $fp @fopen($cache_file'r');
  89.         if $fp {
  90.             $this->error(
  91.                 "Failed to open cache file for reading$cache_file"
  92.             );
  93.             return 0;
  94.         }
  95.         
  96.         if ($filesize filesize($cache_file) ) {
  97.             $data fread$fpfilesize($cache_file) );
  98.             $rss $this->unserialize$data );
  99.         
  100.             return $rss;
  101.         }
  102.         
  103.         return 0;
  104.     }
  105.  
  106. /*=======================================================================*\
  107.     Function:   check_cache
  108.     Purpose:    check a url for membership in the cache
  109.                 and whether the object is older then MAX_AGE (ie. STALE)
  110.     Input:      url from wich the rss file was fetched
  111.     Output:     cached object on HIT, false on MISS 
  112. \*=======================================================================*/     
  113.     function check_cache $url {
  114.         $this->ERROR = "";
  115.         $filename $this->file_name$url );
  116.         
  117.         if file_exists$filename ) ) {
  118.             // find how long ago the file was added to the cache
  119.             // and whether that is longer then MAX_AGE
  120.             $mtime filemtime$filename );
  121.             $age time($mtime;
  122.             if $this->MAX_AGE > $age {
  123.                 // object exists and is current
  124.                 return 'HIT';
  125.             }
  126.             else {
  127.                 // object exists but is old
  128.                 return 'STALE';
  129.             }
  130.         }
  131.         else {
  132.             // object does not exist
  133.             return 'MISS';
  134.         }
  135.     }
  136.  
  137.     function cache_age$cache_key {
  138.         $filename $this->file_name$url );
  139.         if file_exists$filename ) ) {
  140.             $mtime filemtime$filename );
  141.             $age time($mtime;
  142.             return $age;
  143.         }
  144.         else {
  145.             return -1;    
  146.         }
  147.     }
  148.     
  149. /*=======================================================================*\
  150.     Function:   serialize
  151. \*=======================================================================*/     
  152.     function serialize $rss {
  153.         return serialize$rss );
  154.     }
  155.  
  156. /*=======================================================================*\
  157.     Function:   unserialize
  158. \*=======================================================================*/     
  159.     function unserialize $data {
  160.         return unserialize$data );
  161.     }
  162.     
  163. /*=======================================================================*\
  164.     Function:   file_name
  165.     Purpose:    map url to location in cache
  166.     Input:      url from wich the rss file was fetched
  167.     Output:     a file name
  168. \*=======================================================================*/     
  169.     function file_name ($url{
  170.         $filename md5$url );
  171.         return joinDIRECTORY_SEPARATORarray$this->BASE_CACHE$filename ) );
  172.     }
  173.  
  174. /*=======================================================================*\
  175.     Function:   error
  176.     Purpose:    register error
  177. \*=======================================================================*/         
  178.     function error ($errormsg$lvl=E_USER_WARNING{
  179.         // append PHP's error message if track_errors enabled
  180.         if isset($php_errormsg) ) 
  181.             $errormsg .= " ($php_errormsg)";
  182.         }
  183.         $this->ERROR = $errormsg;
  184.         if MAGPIE_DEBUG {
  185.             trigger_error$errormsg$lvl);
  186.         }
  187.         else {
  188.             error_log$errormsg0);
  189.         }
  190.     }
  191.     
  192.     function debug ($debugmsg$lvl=E_USER_NOTICE{
  193.         if MAGPIE_DEBUG {
  194.             $this->error("MagpieRSS [debug] $debugmsg"$lvl);
  195.         }
  196.     }
  197.  
  198. }
  199.  
  200. ?>

Documentation generated on Tue, 01 May 2007 16:47:06 +0200 by phpDocumentor 1.3.2