discuz 6.1 版本。
然后呢。新上传了一个”新春版“的首页。然后再下午4点准时替换 index.php,新版上线。
谁知道呢。在看新版本页面的时候出现了个现象。就是
游客看任然是旧页面。而登陆后呢却能看到新页面。。。 进到DZ后台更新了数据缓存和模板缓存都不行。
荤菜了
急呀
最后想不到问题只能看代码了。
打开 index.php 我看到这一段
if($cacheindexlife && !$discuz_uid && $showoldetails != 'yes' && (!$_DCACHE['settings']['frameon'] || $_DCACHE['settings']['frameon'] && $_GET['frameon'] != 'yes') && empty($gid)) { $indexcache = getcacheinfo(0); if($timestamp - $indexcache['filemtime'] > $cacheindexlife) { @unlink($indexcache['filename']); define('CACHE_FILE', $indexcache['filename']); $styleid = $_DCACHE['settings']['styleid']; } elseif($indexcache['filename']) { @readfile($indexcache['filename']); $debug && debuginfo(); $debug ? die('<mce:script type="text/javascript"><!-- document.getElementById("debuginfo").innerHTML = " '.($debug ? 'Update at '.gmdate("H:i:s", $indexcache['filemtime'] + 3600 * 8).', Processed in '.$debuginfo['time'].' second(s), '.$debuginfo['queries'].' Queries'.($gzipcompress ? ', Gzip enabled' : '') : '').'"; // --></mce:script>') : die(); } }
才发现~~原来如此。
主要看这两个参数: $cacheindexlife && !$discuz_uid
第一个是页面cache 事件,后台设置。 第二个是 用户ID。只要用户登录了才有数值。也就是说如果 用户没登陆而且又设置了页面cache事件。那么进入到这个逻辑里面。。。。
然后再看下面的条件就明白了
if($timestamp - $indexcache['filemtime'] > $cacheindexlife) {
} elseif($indexcache['filename']) {
看这两个。
如果创建的的页面cache文件的创建 时间大于 定义的页面cache 时间后就会删除页面cache 文件。从而使用新的页面cahe 文件。 否则如果页面cache 文件存在呢,就会去读 页面cache 文件然后返回。而新版本的页面还没上线,而旧版本就给用户不断的使用。从而导致旧版本页面"很难”过期
怪不得,没有登录的用户只能看到旧版本页面了。
解决最简单的办法。 进入DZ后台把页面cache 设置为 0 ,然后在上线。然后等旧版本的页面CACHE过期,再进DZ后台开启页面cache 。。就OK了
就因为这个问题~~导致中午要在公司吃烧腊饭~~~