[ Index ]
 

Code source de PHP PEAR 1.4.5

Accédez au Source d'autres logiciels libresSoutenez Angelica Josefina !

title

Body

[fermer]

/Cache/Container/ -> trifile.php (source)

   1  <?php
   2  // +----------------------------------------------------------------------+
   3  // | PEAR :: Cache                                                        |
   4  // +----------------------------------------------------------------------+
   5  // | Copyright (c) 1997-2004 The PHP Group                                |
   6  // +----------------------------------------------------------------------+
   7  // | This source file is subject to version 2.0 of the PHP license,       |
   8  // | that is bundled with this package in the file LICENSE, and is        |
   9  // | available at through the world-wide-web at                           |
  10  // | http://www.php.net/license/2_02.txt.                                 |
  11  // | If you did not receive a copy of the PHP license and are unable to   |
  12  // | obtain it through the world-wide-web, please send a note to          |
  13  // | license@php.net so we can mail you a copy immediately.               |
  14  // +----------------------------------------------------------------------+
  15  // | Authors: Ulf Wendel <ulf.wendel@phpdoc.de>                           |
  16  // |          Sebastian Bergmann <sb@sebastian-bergmann.de>               |
  17  // |          Ian Eure <ieure@php.net>                                    |
  18  // +----------------------------------------------------------------------+
  19  //
  20  // $Id: trifile.php,v 1.1 2004/04/01 07:50:07 chregu Exp $
  21  
  22  require_once  'Cache/Container/file.php';
  23  
  24  /**
  25   * Tri-file cache.
  26   *
  27   * This cache container stores files with no special encoding to reduce overhead.
  28   * Expiration & user data are stored in seperate files, prefixed with a '.' and
  29   * suffixed with '.exp' & '.dat' respectively.
  30   *
  31   * See http://atomized.org/PEAR/Cache_trifile.html for more information.
  32   *
  33   * @author Ian Eure <ieure@php.net>
  34   * @version 1.0
  35   */
  36  class Cache_Container_trifile extends Cache_Container_file {
  37      /**
  38       * Fetch cached file.
  39       *
  40       * @param string $id Cache ID to fetch
  41       * @param string $group Group to fetch from
  42       * @return array 1-dimensional array in the format: expiration,data,userdata
  43       */
  44      function fetch($id, $group)
  45      {
  46          $file = $this->getFilename($id, $group);
  47          if (!file_exists($file))
  48              return array(NULL, NULL, NULL);
  49          
  50          return array(
  51                  file_get_contents($this->_getExpFile($file)),
  52                  file_get_contents($file),
  53                  file_get_contents($this->_getUDFile($file))
  54          );
  55      }
  56      
  57      /**
  58       * Get the file to store cache data in.
  59       *
  60       * @return string Cache data file name
  61       * @access private
  62       */
  63      function _getFile($file)
  64      {
  65          $dir = dirname($file);
  66          $file = basename($file);
  67          return $dir.'/.'.$file;
  68      }
  69      
  70      /**
  71       * Get the file to store expiration data in.
  72       *
  73       * @return string Expiration data file name
  74       * @access private
  75       */
  76      function _getExpFile($file)
  77      {
  78          return $this->_getFile($file).'.exp';
  79      }
  80      
  81      /**
  82       * Get the file to store user data in.
  83       *
  84       * @return string User data file name
  85       * @access private
  86       */
  87      function _getUDFile($file)
  88      {
  89          return $this->_getFile($file).'.dat';
  90      }
  91      
  92      /**
  93       * Cache file
  94       *
  95       * @param string $id Cache ID
  96       * @param mixed $cachedata Data to cache
  97       * @param mixed $expires When the data expires
  98       * @param string $group Cache group to store data in
  99       * @param mixed $userdata Additional data to store
 100       * @return boolean true on success, false otherwise
 101       */
 102      function save($id, $cachedata, $expires, $group, $userdata)
 103      {
 104          $this->flushPreload($id, $group);
 105  
 106          $file = $this->getFilename($id, $group);
 107          if (PEAR::isError($res = $this->_saveData($file, $cachedata))) {
 108              return $res;
 109          }
 110          if (PEAR::isError($res = $this->_saveData($this->_getExpFile($file), $expires))) {
 111              return $res;
 112          }
 113          if(PEAR::isError($res = $this->_saveData($this->_getUDFile($file), $userData))) {
 114              return $res;
 115          }
 116  
 117          return true;
 118      }
 119  
 120      /**
 121       * Save data in a file
 122       *
 123       * @param string $file File to save data in
 124       * @param string $data Data to save
 125       * @return mixed true on success, Cache_Error otherwise
 126       */
 127      function _saveData($file, $data) {
 128          // Save data
 129          if (!($fh = @fopen($file, 'wb')))
 130              return new Cache_Error("Can't access '$file' to store cache data. Check access rights and path.", __FILE__, __LINE__);
 131          
 132          if ($this->fileLocking) {
 133              flock($fh, LOCK_EX);
 134          }
 135          
 136          fwrite($fh, $data);
 137          
 138          if($this->fileLocking) {
 139              flock($fh, LOCK_UN);
 140          }
 141          
 142          fclose($fh);
 143          return true;
 144      }
 145  }
 146  
 147  ?>


Généré le : Sun Feb 25 14:08:00 2007 par Balluche grâce à PHPXref 0.7