List Info

Thread: Cache handler (diff)




Cache handler (diff)
user name
2006-10-16 02:11:38
Sorry, the .diff didn't go thorugh; I've given it a .txt
extension.

Trevor Burnham
? .DS_Store
? smarty.diff
? libs/.DS_Store
? libs/internals/.DS_Store
? libs/plugins/.DS_Store
? plugins/.DS_Store
Index: libs/Smarty.class.php
============================================================
=======
RCS file: /repository/smarty/libs/Smarty.class.php,v
retrieving revision 1.525
diff -u -r1.525 Smarty.class.php
--- libs/Smarty.class.php	28 May 2006 17:35:05 -0000	1.525
+++ libs/Smarty.class.php	15 Oct 2006 23:51:29 -0000
 -324,11
+324,21 
     var $default_resource_type    = 'file';
 
     /**
-     * The function used for cache file handling. If not
set, built-in caching is used.
+     * The function used for cache handling. If not set,
built-in caching is
+     * used.  As of v2.6.15, this may be an array of cache
handlers.  In the
+     * event of a read, each is tried in sequence.  In the
event of a write or
+     * a clear, all of the handlers in the array are
called.  Smarty's built-in
+     * cache handler may be included in the array as
+     * 'Smarty::file_cache_handler'.
+     *
+     * Using an array for this method allows for
performance improvement by
+     * using a volatile (memory-based) cache in conjunction
with a reliable
+     * (disk-based) cache.  Obviously, the cache handlers
should be listed in
+     * the array in order from fastest to slowest.
      *
-     * var null|string function name
+     * var null|string|array function name(s)
      */
-    var $cache_handler_func   = null;
+    var $cache_handler_func   =
'Smarty::file_cache_handler';
 
     /**
      * This indicates which filters are automatically
loaded into Smarty.
 -946,18
+956,8 
 
         $_auto_id = $this->_get_auto_id($cache_id,
$compile_id);
 
-        if (!empty($this->cache_handler_func)) {
-            return
call_user_func_array($this->cache_handler_func,
-                                  array('clear',
&$this, &$dummy, $tpl_file, $cache_id, $compile_id,
$exp_time));
-        } else {
-            $_params = array('auto_base' =>
$this->cache_dir,
-                            'auto_source' => $tpl_file,
-                            'auto_id' => $_auto_id,
-                            'exp_time' => $exp_time);
-            require_once(SMARTY_CORE_DIR .
'core.rm_auto.php');
-            return smarty_core_rm_auto($_params, $this);
-        }
-
+        return $this->_cache_clear($tpl_file, $cache_id,
$compile_id,
+                                   $exp_time);
     }
 
 
 -986,16
+986,7 
         if (!$this->caching)
             return false;
 
-        if (!isset($compile_id))
-            $compile_id = $this->compile_id;
-
-        $_params = array(
-            'tpl_file' => $tpl_file,
-            'cache_id' => $cache_id,
-            'compile_id' => $compile_id
-        );
-        require_once(SMARTY_CORE_DIR .
'core.read_cache_file.php');
-        return smarty_core_read_cache_file($_params,
$this);
+        return $this->_cache_exists($tpl_file,
$cache_id, $compile_id);
     }
 
 
 -1165,15
+1156,14 
             // save old cache_info, initialize cache_info
             array_push($_cache_info,
$this->_cache_info);
             $this->_cache_info = array();
-            $_params = array(
-                'tpl_file' => $resource_name,
-                'cache_id' => $cache_id,
-                'compile_id' => $compile_id,
-                'results' => null
-            );
-            require_once(SMARTY_CORE_DIR .
'core.read_cache_file.php');
-            if (smarty_core_read_cache_file($_params,
$this)) {
-                $_smarty_results = $_params['results'];
+            
+            /* _cache_read() fills the $_smarty_results var
and, if the cache
+             * handler supports it, additional info in
$this->_cache_info.
+             */
+            $_smarty_results = null;
+            if ($this->_cache_read($_smarty_results,
$resource_name,
+                                   $cache_id, $compile_id))
+            {
                 if
(!empty($this->_cache_info['insert_tags'])) {
                     $_params = array('plugins' =>
$this->_cache_info['insert_tags']);
                     require_once(SMARTY_CORE_DIR .
'core.load_plugins.php');
 -1188,7
+1178,6 
                     $_smarty_results =
smarty_core_process_compiled_include($_params, $this);
                 }
 
-
                 if ($display) {
                     if ($this->debugging)
                     {
 -1229,6
+1218,7 
                     return $_smarty_results;
                 }
             } else {
+                // data not found in the cache
                
$this->_cache_info['template'][$resource_name] = true;
                 if ($this->cache_modified_check
&& $display) {
                     header('Last-Modified: '.gmdate('D, d M
Y H:i:s', time()).' GMT');
 -1273,12
+1263,8 
         }
 
         if ($this->caching) {
-            $_params = array('tpl_file' =>
$resource_name,
-                        'cache_id' => $cache_id,
-                        'compile_id' => $compile_id,
-                        'results' => $_smarty_results);
-            require_once(SMARTY_CORE_DIR .
'core.write_cache_file.php');
-            smarty_core_write_cache_file($_params, $this);
+            $this->_cache_write($_smarty_results,
$resource_name, $cache_id,
+                                $compile_id);
             require_once(SMARTY_CORE_DIR .
'core.process_cached_inserts.php');
             $_smarty_results =
smarty_core_process_cached_inserts($_params, $this);
 
 -1914,6
+1900,310 
 
 
     /**
+     * call the cache handler function(s) to see if a cache
exists
+     *
+     * If there are multiple cache handlers, they are tried
in order until one
+     * gives a true or false response.  A handler may
return a value of 'defer'
+     * in order to indicate that the next handler should be
tried.  The last
+     * cache handler tried is given the action
'check_final', which disallows
+     * a defer response.
+     *
+     * Note that older function handlers may raise an error
when called with a
+     * 'check' or 'check_final' action, or may simply
return false without
+     * performing any action.
+     *
+     * param string $tpl_file name of template file
+     * param string $cache_id name of cache_id
+     * param string $compile_id name of compile_id
+     * return boolean true if the cache exists (see above),
false otherwise
+     */
+    function _cache_exists($tpl_file, $cache_id,
$compile_id)
+    {
+        if (!isset($compile_id))
+                $compile_id = $this->compile_id;
+    
+        $cache_handler = $this->cache_handler_func;
+        if (!is_array($cache_handler))
+            $cache_handler = array($cache_handler);
+
+        /* Test the caches until one says true or false. */
+        $last_func = array_pop($cache_handler);
+        foreach($cache_handler as $func) {
+            $exists = $this->_call_function($func,
array('check', $this,
+                                            null,
$tpl_file, $cache_id,
+                                            $compile_id,
$exp_time));
+            if ($exists == true || $exists == false)
+                return $exists;
+        }
+        return $this->_call_function($last_func,
array('check_final', $this,
+                                     null, $tpl_file,
$cache_id, $compile_id,
+                                     $exp_time));
+    }
+
+    /**
+     * call the cache handler function(s) for a clear
operation
+     *
+     * If there are multiple cache handlers, they are all
called sequentially
+     * in reverse order.
+     *
+     * param string $tpl_file name of template file
+     * param string $cache_id name of cache_id
+     * param string $compile_id name of compile_id
+     * param numeric $exp_time
+     * return boolean true if all caches were cleared, false
otherwise.
+     */
+    function _cache_clear($tpl_file, $cache_id,
$compile_id, $exp_time)
+    {
+        $cache_handler = $this->cache_handler_func;
+        if (!is_array($cache_handler))
+            $cache_handler = array($cache_handler);
+        else
+            $cache_handler = array_reverse($cache_handler);
+        
+        /* We attempt to clear all caches. */
+        $success = true;
+        foreach($cache_handler as $func) {
+            $cleared = $this->_call_function($func,
array('clear', $this,
+                                             null,
$tpl_file, $cache_id,
+                                             $compile_id,
$exp_time));
+            if (! $cleared)
+                $success = false;
+        }
+        
+        // True is returned only if all caches reported
that they cleared.
+        return $success;
+    }
+
+
+    /**
+     * call the cache handler function(s) for a read
operation
+     *
+     * If there are multiple cache handlers, they are
attempted sequentially
+     * until ones gives a positive result.
+     *
+     * param string results data from the cache
+     * param string $tpl_file name of template file
+     * param string $cache_id name of cache_id
+     * param string $compile_id name of compile_id
+     * return boolean true if the cache reported success,
false otherwise.
+     */
+    function _cache_read(&$results, $tpl_file,
$cache_id, $compile_id,
+        $exp_time = null)
+    {
+        if ($this->force_compile) {
+            // force compile enabled, always regenerate
+            return false;
+        }
+        
+        $cache_handler = $this->cache_handler_func;
+        if (!is_array($cache_handler))
+            $cache_handler = array($cache_handler);
+
+        /* We try all caches in sequence until we get a
result. */
+        foreach($cache_handler as $func) {
+            $success = $this->_call_function($func,
array('read', $this, &$results,
+                                             $tpl_file,
$cache_id, $compile_id,
+                                             $exp_time));
+            if ($success)
+                break;
+        }
+        
+        if (! $success)
+            return false;
+            
+        // process inserts and other metadata
+        $_info_start = strpos($results, "n") +
1;
+        $_info_len = (int)substr($results, 0, $_info_start
- 1);
+        $_cache_info = unserialize(substr($results,
$_info_start, $_info_len));
+        $results = substr($results, $_info_start +
$_info_len);
+    
+        if ($this->caching == 2 && isset
($_cache_info['expires'])){
+            // caching by expiration time
+            if ($_cache_info['expires'] > -1 &&
(time() > $_cache_info['expires'])) {
+                // cache expired, regenerate
+                return false;
+            }
+        } else {
+            // caching by lifetime
+            if ($this->cache_lifetime > -1 &&
(time() - $_cache_info['timestamp'] >
$this->cache_lifetime)) {
+                // cache expired, regenerate
+                return false;
+            }
+        }
+    
+        if ($this->compile_check) {
+            $_params = array('get_source' => false,
'quiet'=>true);
+            foreach (array_keys($_cache_info['template'])
as $_template_dep) {
+                $_params['resource_name'] = $_template_dep;
+                if
(!$this->_fetch_resource_info($_params) ||
$_cache_info['timestamp'] <
$_params['resource_timestamp']) {
+                    // template file has changed,
regenerate cache
+                    return false;
+                }
+            }
+    
+            if (isset($_cache_info['config'])) {
+                $_params = array('resource_base_path' =>
$this->config_dir, 'get_source' => false,
'quiet'=>true);
+                foreach (array_keys($_cache_info['config'])
as $_config_dep) {
+                    $_params['resource_name'] =
$_config_dep;
+                    if
(!$this->_fetch_resource_info($_params) ||
$_cache_info['timestamp'] <
$_params['resource_timestamp']) {
+                        // config file has changed,
regenerate cache
+                        return false;
+                    }
+                }
+            }
+        }
+    
+       
$content_cache[$tpl_file.','.$cache_id.','.$compile_id] =
array($results, $_cache_info);
+        $this->_cache_info = $_cache_info;
+        
+        return true;
+    }
+
+
+    /**
+     * call the cache handler function(s) for a write
operation
+     
+     * If there are multiple cache handlers, they are all
called sequentially
+     * in reverse order.
+     *
+     * param string $cache_content data to put in the cache
+     * param string $tpl_file name of template file
+     * param string $cache_id name of cache_id
+     * param string $compile_id name of compile_id
+     * return boolean true if all caches reported success,
false otherwise.
+     */
+    function _cache_write($cache_content, $tpl_file,
$cache_id, $compile_id)
+    {
+        $cache_handler = $this->cache_handler_func;
+        if (!is_array($cache_handler))
+            $cache_handler = array($cache_handler);
+        else
+            $cache_handler = array_reverse($cache_handler);
+    
+        // prepend metadata to $cache_content
+
+        $this->_cache_info['timestamp'] = time();
+        if ($this->cache_lifetime > -1){
+            // expiration set
+            $this->_cache_info['expires'] =
$this->_cache_info['timestamp'] +
$this->cache_lifetime;
+        } else {
+            // cache will never expire
+            $this->_cache_info['expires'] = -1;
+        }
+    
+        // collapse nocache.../nocache-tags
+        if
(preg_match_all('!{(/?)nocache:[0-9a-f]#d+}!',
$cache_content, $match, PREG_PATTERN_ORDER)) {
+            // remove everything between every pair of
outermost noache.../nocache-tags
+            // and replace it by a single nocache-tag
+            // this new nocache-tag will be replaced by
dynamic contents in
+            // smarty_core_process_compiled_includes() on a
cache-read
+            
+            $match_count = count($match[0]);
+            $results =
preg_split('!({/?nocache:[0-9a-f]#d+})!',
$cache_content, -1, PREG_SPLIT_DELIM_CAPTURE);
+            
+            $level = 0;
+            $j = 0;
+            for ($i=0, $results_count = count($results); $i
< $results_count && $j < $match_count; $i++) {
+                if ($results[$i] == $match[0][$j]) {
+                    // nocache tag
+                    if ($match[1][$j]) { // closing tag
+                        $level--;
+                        unset($results[$i]);
+                    } else { // opening tag
+                        if ($level++ > 0)
unset($results[$i]);
+                    }
+                    $j++;
+                } elseif ($level > 0) {
+                    unset($results[$i]);
+                }
+            }
+            $cache_content = implode('', $results);
+        }
+        $this->_cache_info['cache_serials'] =
$this->_cache_serials;
+    
+        // prepend the cache header info into cache file
+        $_cache_info = serialize($this->_cache_info);
+        $cache_content = strlen($_cache_info) .
"n" . $_cache_info . $cache_content;
+    
+        /* We attempt to write to all caches. */
+        $success = true;
+        foreach($cache_handler as $func) {
+            $written = $this->_call_function($func,
array('write', $this,
+                                            $cache_content,
$tpl_file,
+                                            $cache_id,
$compile_id, null));
+            if (! $written)
+                $success = false;
+        }
+        
+        // True is returned only if all caches reported
success.
+        return $success;
+    }
+
+    /**
+     * static function that serves as the default cache
handler
+     * param string action 'read', 'write', 'check',
'check_final' or 'clear'.
+     * param Smarty smarty_obj
+     * param string cache_content
+     * param string tpl_file
+     * param string cache_id
+     * param string compile_id
+     * param null exp_time
+     * return boolean true on success, false otherwise.
+     */
+    static function file_cache_handler($action,
&$smarty_obj, &$cache_content,
+      $tpl_file=null, $cache_id=null, $compile_id=null,
$exp_time=null)
+    {
+        $auto_id = $smarty_obj->_get_auto_id($cache_id,
$compile_id);
+        
+        switch ($action) {
+            case 'check':
+            case 'check_final':
+                $_params = array('tpl_file' =>
$tpl_file,
+                                 'cache_id' =>
$cache_id,
+                                 'compile_id' =>
$compile_id);
+                require_once(SMARTY_CORE_DIR .
'core.read_cache_file.php');
+                return
smarty_core_read_cache_file($_params, $smarty_obj);
+            case 'clear':
+                $_params = array('auto_base' =>
$smarty_obj->cache_dir,
+                                 'auto_source' =>
$tpl_file,
+                                 'auto_id' => $auto_id,
+                                 'exp_time' =>
$exp_time);
+                require_once(SMARTY_CORE_DIR .
'core.rm_auto.php');
+                return smarty_core_rm_auto($_params,
$smarty_obj);
+            case 'read':
+                $_params = array('results' =>
&$cache_content,
+                                 'tpl_file' =>
$tpl_file,
+                                 'cache_id' =>
$cache_id,
+                                 'compile_id' =>
$compile_id);
+                require_once(SMARTY_CORE_DIR .
'core.read_cache_file.php');
+                return
smarty_core_read_cache_file($_params, $smarty_obj);
+            case 'write':
+                $_params = array('tpl_file' =>
$tpl_file,
+                                 'cache_id' =>
$cache_id,
+                                 'compile_id' =>
$compile_id,
+                                 'results' =>
$cache_content);
+                require_once(SMARTY_CORE_DIR .
'core.write_cache_file.php');
+                return
smarty_core_write_cache_file($_params, $smarty_obj);
+        }
+    }
+    
+    /**
+     * wrapper for call_user_func_array() that parses class
function and
+     * object method calls
+     * param string function
+     * param array params
+     * return mixed
+     */
+    function _call_function(&$function, $params) {
+        if (is_array($function)) {
+            // already an array, perform no action
+        } elseif (strstr($function, '::') != false) {
+            $function = explode('::', $function); // class
static function call
+        }
+        return call_user_func_array($function, $params);
+    }
+
+    /**
      * wrapper for include() retaining $this
      * return mixed
      */
 -1936,7
+2226,6 
         return eval($code);
     }
     /**#-*/
-
 }
 
 /* vim: set expandtab: */
Index: libs/internals/core.read_cache_file.php
============================================================
=======
RCS file:
/repository/smarty/libs/internals/core.read_cache_file.php,v
retrieving revision 1.3
diff -u -r1.3 core.read_cache_file.php
--- libs/internals/core.read_cache_file.php	8 Jul 2005
18:11:22 -0000	1.3
+++ libs/internals/core.read_cache_file.php	15 Oct 2006
23:51:29 -0000
 -22,77
+22,22 
 {
     static  $content_cache = array();
 
-    if ($smarty->force_compile) {
-        // force compile enabled, always regenerate
-        return false;
-    }
-
+    // if this cache file has already been read during this
script, don't read it again
     if
(isset($content_cache[$params['tpl_file'].','.$params['cache
_id'].','.$params['compile_id']])) {
         list($params['results'], $smarty->_cache_info) =
$content_cache[$params['tpl_file'].','.$params['cache_id'].'
,'.$params['compile_id']];
         return true;
     }
 
-    if (!empty($smarty->cache_handler_func)) {
-        // use cache_handler function
-       
call_user_func_array($smarty->cache_handler_func,
-                             array('read', &$smarty,
&$params['results'], $params['tpl_file'],
$params['cache_id'], $params['compile_id'], null));
-    } else {
-        // use local cache file
-        $_auto_id =
$smarty->_get_auto_id($params['cache_id'],
$params['compile_id']);
-        $_cache_file =
$smarty->_get_auto_filename($smarty->cache_dir,
$params['tpl_file'], $_auto_id);
-        $params['results'] =
$smarty->_read_file($_cache_file);
-    }
+    // read from the cache file
+    $_auto_id =
$smarty->_get_auto_id($params['cache_id'],
$params['compile_id']);
+    $_cache_file =
$smarty->_get_auto_filename($smarty->cache_dir,
$params['tpl_file'], $_auto_id);
+    $params['results'] =
$smarty->_read_file($_cache_file);
 
     if (empty($params['results'])) {
         // nothing to parse (error?), regenerate cache
         return false;
     }
 
-    $_contents = $params['results'];
-    $_info_start = strpos($_contents, "n") + 1;
-    $_info_len = (int)substr($_contents, 0, $_info_start -
1);
-    $_cache_info = unserialize(substr($_contents,
$_info_start, $_info_len));
-    $params['results'] = substr($_contents, $_info_start +
$_info_len);
-
-    if ($smarty->caching == 2 && isset
($_cache_info['expires'])){
-        // caching by expiration time
-        if ($_cache_info['expires'] > -1 &&
(time() > $_cache_info['expires'])) {
-            // cache expired, regenerate
-            return false;
-        }
-    } else {
-        // caching by lifetime
-        if ($smarty->cache_lifetime > -1 &&
(time() - $_cache_info['timestamp'] >
$smarty->cache_lifetime)) {
-            // cache expired, regenerate
-            return false;
-        }
-    }
-
-    if ($smarty->compile_check) {
-        $_params = array('get_source' => false,
'quiet'=>true);
-        foreach (array_keys($_cache_info['template']) as
$_template_dep) {
-            $_params['resource_name'] = $_template_dep;
-            if (!$smarty->_fetch_resource_info($_params)
|| $_cache_info['timestamp'] <
$_params['resource_timestamp']) {
-                // template file has changed, regenerate
cache
-                return false;
-            }
-        }
-
-        if (isset($_cache_info['config'])) {
-            $_params = array('resource_base_path' =>
$smarty->config_dir, 'get_source' => false,
'quiet'=>true);
-            foreach (array_keys($_cache_info['config']) as
$_config_dep) {
-                $_params['resource_name'] = $_config_dep;
-                if
(!$smarty->_fetch_resource_info($_params) ||
$_cache_info['timestamp'] <
$_params['resource_timestamp']) {
-                    // config file has changed, regenerate
cache
-                    return false;
-                }
-            }
-        }
-    }
-
-   
$content_cache[$params['tpl_file'].','.$params['cache_id'].'
,'.$params['compile_id']] = array($params['results'],
$_cache_info);
-
-    $smarty->_cache_info = $_cache_info;
     return true;
 }
 
Index: libs/internals/core.write_cache_file.php
============================================================
=======
RCS file:
/repository/smarty/libs/internals/core.write_cache_file.php,
v
retrieving revision 1.4
diff -u -r1.4 core.write_cache_file.php
--- libs/internals/core.write_cache_file.php	1 Feb 2005
10:19:08 -0000	1.4
+++ libs/internals/core.write_cache_file.php	15 Oct 2006
23:51:29 -0000
 -20,75
+20,24 
 
 function smarty_core_write_cache_file($params,
&$smarty)
 {
+    //write to the cache file
 
-    // put timestamp in cache header
-    $smarty->_cache_info['timestamp'] = time();
-    if ($smarty->cache_lifetime > -1){
-        // expiration set
-        $smarty->_cache_info['expires'] =
$smarty->_cache_info['timestamp'] +
$smarty->cache_lifetime;
-    } else {
-        // cache will never expire
-        $smarty->_cache_info['expires'] = -1;
-    }
-
-    // collapse nocache.../nocache-tags
-    if
(preg_match_all('!{(/?)nocache:[0-9a-f]#d+}!',
$params['results'], $match, PREG_PATTERN_ORDER)) {
-        // remove everything between every pair of
outermost noache.../nocache-tags
-        // and replace it by a single nocache-tag
-        // this new nocache-tag will be replaced by dynamic
contents in
-        // smarty_core_process_compiled_includes() on a
cache-read
-        
-        $match_count = count($match[0]);
-        $results =
preg_split('!({/?nocache:[0-9a-f]#d+})!',
$params['results'], -1, PREG_SPLIT_DELIM_CAPTURE);
-        
-        $level = 0;
-        $j = 0;
-        for ($i=0, $results_count = count($results); $i
< $results_count && $j < $match_count; $i++) {
-            if ($results[$i] == $match[0][$j]) {
-                // nocache tag
-                if ($match[1][$j]) { // closing tag
-                    $level--;
-                    unset($results[$i]);
-                } else { // opening tag
-                    if ($level++ > 0)
unset($results[$i]);
-                }
-                $j++;
-            } elseif ($level > 0) {
-                unset($results[$i]);
-            }
-        }
-        $params['results'] = implode('', $results);
-    }
-    $smarty->_cache_info['cache_serials'] =
$smarty->_cache_serials;
-
-    // prepend the cache header info into cache file
-    $_cache_info = serialize($smarty->_cache_info);
-    $params['results'] = strlen($_cache_info) .
"n" . $_cache_info . $params['results'];
-
-    if (!empty($smarty->cache_handler_func)) {
-        // use cache_handler function
-       
call_user_func_array($smarty->cache_handler_func,
-                             array('write', &$smarty,
&$params['results'], $params['tpl_file'],
$params['cache_id'], $params['compile_id'], null));
-    } else {
-        // use local cache file
-
-        if(!is_writable($smarty->cache_dir)) {
-            // cache_dir not writable, see if it exists
-            if(!is_dir($smarty->cache_dir)) {
-                $smarty->trigger_error('the $cache_dir
'' . $smarty->cache_dir . '' does not exist, or is not
a directory.', E_USER_ERROR);
-                return false;
-            }
-            $smarty->trigger_error('unable to write to
$cache_dir '' . realpath($smarty->cache_dir) . ''. Be
sure $cache_dir is writable by the web server user.',
E_USER_ERROR);
+    if(!is_writable($smarty->cache_dir)) {
+        // cache_dir not writable, see if it exists
+        if(!is_dir($smarty->cache_dir)) {
+            $smarty->trigger_error('the $cache_dir '' .
$smarty->cache_dir . '' does not exist, or is not a
directory.', E_USER_ERROR);
             return false;
         }
-
-        $_auto_id =
$smarty->_get_auto_id($params['cache_id'],
$params['compile_id']);
-        $_cache_file =
$smarty->_get_auto_filename($smarty->cache_dir,
$params['tpl_file'], $_auto_id);
-        $_params = array('filename' => $_cache_file,
'contents' => $params['results'], 'create_dirs' =>
true);
-        require_once(SMARTY_CORE_DIR .
'core.write_file.php');
-        smarty_core_write_file($_params, $smarty);
-        return true;
+        $smarty->trigger_error('unable to write to
$cache_dir '' . realpath($smarty->cache_dir) . ''. Be
sure $cache_dir is writable by the web server user.',
E_USER_ERROR);
+        return false;
     }
+
+    $_auto_id =
$smarty->_get_auto_id($params['cache_id'],
$params['compile_id']);
+    $_cache_file =
$smarty->_get_auto_filename($smarty->cache_dir,
$params['tpl_file'], $_auto_id);
+    $_params = array('filename' => $_cache_file,
'contents' => $params['results'], 'create_dirs' =>
true);
+    require_once(SMARTY_CORE_DIR . 'core.write_file.php');
+    smarty_core_write_file($_params, $smarty);
+    return true;
 }
 
 /* vim: set expandtab: */

-- 
Smarty Development Mailing List (http://smarty.php.net/)
To unsubscribe, visit: http://www.php.net/unsub
.php
Cache handler (diff)
user name
2006-10-16 09:43:42
On Sun, Oct 15, 2006 at 08:11:38PM -0600, Trevor Burnham
wrote:
> Sorry, the .diff didn't go thorugh; I've given it a
.txt extension.
> 
> Trevor Burnham

you could wrap the handling of multiple sub-handlers into a
special
cache-handler instead of patching 26kb into smarty, couldn't
you?

[...]
> +            if ($exists == true || $exists == false)
> +                return $exists;

WTF?

[...]

-- 
Smarty Development Mailing List (http://smarty.php.net/)
To unsubscribe, visit: http://www.php.net/unsub
.php

[1-2]

about | contact  Other archives ( Real Estate discussion Medical topics )