问题就是这样,
function fetch
function is_cached
改了这两个函数部分
ecshop 自身是不报错了,但是现在就是不知道 ecshop 对缓存调用 成功不?请各位大大pp。help。
1 | function fetch( $filename , $cache_id = '' ) { if (! $this ->_seterror) { error_reporting (E_ALL ^ E_NOTICE); } $this ->_seterror++; if ( strncmp ( $filename , 'str:' , 4) == 0) { $out = $this ->_eval( $this ->fetch_str( substr ( $filename , 4))); } else { if ( $this ->_checkfile) { if (! file_exists ( $filename )) { $filename = $this ->template_dir . '/' . $filename ; } } else { $filename = $this ->template_dir . '/' . $filename ; } if ( $this ->direct_output) { $this ->_current_file = $filename ; $out = $this ->_eval( $this ->fetch_str( file_get_contents ( $filename ))); } else { if ( $cache_id && $this ->caching) { $out = $this ->template_out; } else { if (!in_array( $filename , $this ->template)) { $this ->template[] = $filename ; } $out = $this ->make_compiled( $filename ); if ( $cache_id ) { $cachename = basename ( $filename , strrchr ( $filename , '.' )) . '_' . $cache_id ; $data = serialize( array ( 'template' => $this ->template, 'expires' => $this ->_nowtime + $this ->cache_lifetime, 'maketime' => $this ->_nowtime)); $out = str_replace ( "\r" , '' , $out ); $memcache = new Memcache; $memcache ->connect( "127.0.0.1" , 11211); $CacheID = md5( $filename . $cache_id . $cachename ); while ( strpos ( $out , "\n\n" ) !== false) { $out = str_replace ( "\n\n" , "\n" , $out ); } $memcache ->set( $CacheID , '<?php exit;?>' . $data . $out , 3600); $this ->template = array (); } } } } $this ->_seterror--; if (! $this ->_seterror) { error_reporting ( $this ->_errorlevel); } return $out ; |
Salin selepas log masuk
1 | function is_cached( $filename , $cache_id = '' ) { $cachename = basename ( $filename , strrchr ( $filename , '.' )) . '_' . $cache_id ; $memcache = new Memcache; $memcache ->connect( "127.0.0.1" , 11211); $CacheID = md5( $filename . $cache_id . $cachename ); if ( $this ->caching == true && $this ->direct_output == false) { if ( $data = $memcache ->get( $CacheID )) { $data = substr ( $data , 13); $pos = strpos ( $data , '<' ); $paradata = substr ( $data , 0, $pos ); $para = @unserialize( $paradata ); if ( $para === false || $this ->_nowtime > $para [ 'expires' ]) { $this ->caching = false; return false; } $this ->_expires = $para [ 'expires' ]; $this ->template_out = substr ( $data , $pos ); foreach ( $para [ 'template' ] AS $val ) { $stat = @stat( $val ); if ( $para [ 'maketime' ] < $stat [ 'mtime' ]) { $this ->caching = false; return false; } } } else { $this ->caching = false; return false; } return true; } else { return false; } } |
Salin selepas log masuk
回复讨论(解决方案)
对了,是 cls_template.php 这个文件中的函数
你查下数据不就行了
1 | ecshop 缓存 分类信息 失效时间 1小时需要修改的文件 category.php $memcache ->set( $cache_var , $data , 0, 3600); | | | | key 数据 压缩 失效时间(秒) 自行替换 //mem缓存分类 function get_cat_info( $cat_id ){ $memcache = new Memcache; $memcache ->connect( "127.0.0.1" , 11211); $cache_var = 'men_category_info_' . $cat_id ; $data = $memcache ->get( $cache_var ); if ( $data === false){ $data = $GLOBALS [ 'db' ]->getRow( 'SELECT cat_name, keywords, cat_desc, style, grade, filter_attr, parent_id FROM ' . $GLOBALS [ 'ecs' ]->table( 'category' ) . " WHERE cat_id = '$cat_id'" ); $memcache ->set( $cache_var , $data , 0, 3600); return $data ; } else { return $data ; }}
|
Salin selepas log masuk
这样解决了 谢谢
还有好几个文件一样处理
修改修改的文件 includes/cls_template.php
需要改写的文件 includes/lib_base.php
需要修改的文件 category.php