Beispiel #1
0
 /**
  * Cache content
  *
  * Returns feedParser object from cache if present or write it to cache and
  * returns result.
  *
  * @param string	$url			Feed URL
  * @return feedParser
  */
 protected function withCache($url)
 {
     $url_md5 = md5($url);
     $cached_file = sprintf('%s/%s/%s/%s/%s.php', $this->cache_dir, $this->cache_file_prefix, substr($url_md5, 0, 2), substr($url_md5, 2, 2), $url_md5);
     $may_use_cached = false;
     if (@file_exists($cached_file)) {
         $may_use_cached = true;
         $ts = @filemtime($cached_file);
         if ($ts > strtotime($this->cache_ttl)) {
             # Direct cache
             return unserialize(file_get_contents($cached_file));
         }
         $this->setValidator('IfModifiedSince', $ts);
     }
     if (!$this->getFeed($url)) {
         if ($may_use_cached) {
             # connection failed - fetched from cache
             return unserialize(file_get_contents($cached_file));
         }
         return false;
     }
     switch ($this->getStatus()) {
         case '304':
             @files::touch($cached_file);
             return unserialize(file_get_contents($cached_file));
         case '200':
             if ($feed = new feedParser($this->getContent())) {
                 try {
                     files::makeDir(dirname($cached_file), true);
                 } catch (Exception $e) {
                     return $feed;
                 }
                 if ($fp = @fopen($cached_file, 'wb')) {
                     fwrite($fp, serialize($feed));
                     fclose($fp);
                     files::inheritChmod($cached_file);
                 }
                 return $feed;
             }
     }
     return false;
 }
 /**
  * Get repository modules list using cache.
  *
  * @param	string	$url		XML feed URL
  * @return	array	Feed content or False on fail
  */
 protected function withCache($url)
 {
     $url_md5 = md5($url);
     $cached_file = sprintf('%s/%s/%s/%s/%s.ser', $this->cache_dir, $this->cache_file_prefix, substr($url_md5, 0, 2), substr($url_md5, 2, 2), $url_md5);
     $may_use_cached = false;
     # Use cache file ?
     if (@file_exists($cached_file) && !$this->force) {
         $may_use_cached = true;
         $ts = @filemtime($cached_file);
         if ($ts > strtotime($this->cache_ttl)) {
             # Direct cache
             return unserialize(file_get_contents($cached_file));
         }
         $this->setValidator('IfModifiedSince', $ts);
     }
     # Query repository
     if (!$this->getModulesXML($url)) {
         if ($may_use_cached) {
             # Touch cache TTL even if query failed ?
             if ($this->cache_touch_on_fail) {
                 @files::touch($cached_file);
             }
             # Connection failed - fetched from cache
             return unserialize(file_get_contents($cached_file));
         }
         return false;
     }
     # Parse response
     switch ($this->getStatus()) {
         # Not modified, use cache
         case '304':
             @files::touch($cached_file);
             return unserialize(file_get_contents($cached_file));
             # Ok, parse feed
         # Ok, parse feed
         case '200':
             if ($modules = new dcStoreParser($this->getContent())) {
                 try {
                     files::makeDir(dirname($cached_file), true);
                 } catch (Exception $e) {
                     return $modules;
                 }
                 if ($fp = @fopen($cached_file, 'wb')) {
                     fwrite($fp, serialize($modules));
                     fclose($fp);
                     files::inheritChmod($cached_file);
                 }
                 return $modules;
             }
     }
     return false;
 }