ECShop的緩存存放在templates/caches/文章夾下,時間長了這個文件夾就會非常龐大,拖慢網站速度。還有很多情況我們不需要他的緩存。本文介紹禁用ECSHOP緩存的方法。
ECSHOP的緩存有兩部分,一部分是SMARTY的頁面緩存;另一部分是sql查詢結果的緩存。這兩部分都是保存在templates/caches/文件夾下。只要我們分別關閉這兩個功能,就可以完全禁用ECSHOP的緩存。當然你也可以根據自己的需要關閉其中某一個。
推薦(免費):ecshop
1、關閉SMARTY的緩存
打開includes/cls_template.php,找到下面一段
if?(file_put_contents($this->cache_dir?.?‘/’?.?$cachename?.?‘.php’,?‘<?php exit;?>’?.?$data?.?$out)?===?false) { trigger_error(‘can’t?write:’?.?$this->cache_dir?.?‘/’?.?$cachename?.?‘.php’); }
–將此代碼注釋掉
2、關閉SQL查詢結果緩存
打開includes/cls_mysql.php
找到
var?$max_cache_time=3600;//最大的緩存時間,以秒為單位
改為
var?$max_cache_time=0;//最大的緩存時間,以秒為單位
如何限制或禁用ECShop緩存呢?按道理只要ftp登錄到主機空間服務器,清除“templates/caches”文件夾下的緩存文件,但比較安全穩妥的辦法是進入ecshop網店后臺點擊右上角“清除緩存”按鈕。還是完全禁用ecshop的緩存功能。
一、禁用ecshop部分數據表緩存
ecshop里caches文件夾緩存文件包括sql查詢結果緩存和SMARTY模板頁面緩存。如果訪問網站的用戶一多,這些臨時的緩存數據都被保持在ECshop的“templates/caches”文件夾下。數據緩存對提高網店速度有一定作用,但緩存文件一多也就過猶不及。有人說只對favourable_activity,goods_activity這2個表禁用緩存即可。
打開include/init.php,找到
PHP代碼
$db->set_disable_cache_tables(array($ecs->table(’sessions’),?$ecs->table(’sessions_data’),?$ecs->table(’cart’)));
修改為
PHP代碼
$db->set_disable_cache_tables(array($ecs->table(’sessions’),?$ecs->table(’sessions_data’),?$ecs->table(’cart’),?$ecs->table(’favourable_activity’),?$ecs->table(’goods_activity’)));
二、完全禁用ecshop緩存
定期要登錄ecshop網店后臺清除緩存文件,對于懶人來說,這也挺嫌麻煩的。那干脆完全禁用ecshop緩存吧。參考小蟲的禁用echsop緩存文章,小蟲的具體代碼是2.6.0左右的版本。2.7的ecshop禁用緩存修改方法類似:
1. 用editplus打開include/cls_template.php,把下面代碼注釋掉:
PHP代碼
2.用editplus打開include/cls_mysql.php,找到 max_cache_time = 300,把300改為0即可
三、templates/compiled下的文件是否可以清空?
templates/compiled下的文件是模板編譯后文件,可以清空。當用戶瀏覽網店后又會重新生成。templates文件夾下的主要是caches里緩存文件太多,你可以定期清空或完全禁用ecshop緩存。
----------------------------------------------
關于清除緩存的建議!!
發現現在的清除緩存做的比較粗!和之前沒大變化啊!和2.0.5一樣.
只要后臺隨便一個修改的操作,整個緩存就都沒了!用的都是$smarty->clear_all_cache();
缺點:如果我有10萬商品,而且都被瀏覽過,我后臺一個操作就要清楚15萬多緩存文件:)似乎極限了點
只是舉例!!,希望ECSHOP更加完美而已!
smarty里面不是有這個函數么?
clear_cache(),我小修改了下,增加了可以指定刪除某個目錄下的緩存,用處是:可方便的刪除商品的分類緩存!
2.0.5上我是這么改的,另外在根目錄建立一個緩存目錄templates_caches,里面建立article,article_cat,goods,goods_cat,4個文件夾分別放文章內容,文章列表,商品內容,商品列表的緩存
例子:對商品,文章部分的修改
前臺init.php和后臺init.php加入如下代碼,我為了方便直接加在config.php里面了
//緩存目錄設置 define('ECS_ROOT',?substr(dirname(__FILE__),?0,?-8));//前后臺數字當然不一樣了:) //文章緩存 $cache_dir_article?=?ECS_ROOT.'./templates_caches/article'; $cache_dir_article_cat?=?ECS_ROOT.'./templates_caches/article_cat'; //商品緩存 $cache_dir_goods?=?ECS_ROOT.'./templates_caches/goods'; $cache_dir_goods_cat?=?ECS_ROOT.'./templates_caches/goods_cat';
前臺商品內容和分類緩存時間單獨設置長一些,如內容一個月,分類1天
修改后臺,商品單獨修改的地方只刪除這個商品內容的緩存
只要有修改操作就刪除商品分類緩存和首頁緩存!加入如下
$smarty->clear_cache(null,?null,?null,?null,?$cache_dir_goods_cat);//zouql:刪除商品目錄緩存,默認緩存時間 $smarty->clear_cache('goods.html',?$goods_id,?null,?null,?$cache_dir_goods);//zouql:刪除商品緩存,默認緩存時間
還有廣告管理等等等等等等等等地方要改!
前臺用戶發表評論后自動刪除本商品緩存等等……….
function?clear_cache($tpl_file?=?null,?$cache_id?=?null,?$compile_id?=?null,?$exp_time?=?null,?$cache_dir?=?null) { if?(!isset($cache_dir)) $cache_dir?=?$this->cache_dir; if?(!isset($compile_id)) $compile_id?=?$this->compile_id; if?(!isset($tpl_file)) $compile_id?=?null; $_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'?=>?$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); } }