织梦读缓存函数GetCache($prefix, $key, $is_memcache = TRUE)

admin2020-01-27952

如果弄明白了写缓存函数,那么,读缓存文件就非常简单了,特别是开启mc缓存的读取几乎一样。如何读取一个缓存文件内容?我们就拿在写缓存文件的例子作为本教程的例子。

缓存文件内容:

<?php exit('dedecms');?>
a:2:{s:4:"data";s:29:"织梦:www.xxx.com";s:7:"timeout";i:1438052238;}

我们要获取这个文件内容,首先得找到这个文件,然后,把这个文件里面的头部信息<?php exit('dedecms');?>去掉,因为,我们读的主要是这行代码下面的这行。最后,要把下面这行串行化后的代码进行反串行化处理,处理后的内容才是我们要的内容,其实,读缓存文件就这几个地方要处理,只要把这些处理好了,就可以了。

若是,明白了要处理的内容,再去研究一下代码就容易多了。

所在文件:include/helpers/cache.helper.php

要获取缓存文件内容,首先,查找这个文件,这就要求在获取缓存文件时,参数要和写缓存文件时,前二参数必须一致,否则,找不到文件,就取不出内容来。

加密$key ,然后,判断一下是不是开启了mc缓存,若开启了,则通过$GLOBALS ['mc_' . $mc_path ['host']]->get ( $key )来获取缓存文件路径。织梦系统默认情况下没有开启这个,接着执行下面的代码。

设置$key,这个和写缓存完全一样。

然后,获取缓存文件的内容:

$result = @file_get_contents ( DEDEDATA . "/cache/$prefix/$key.php" );

接下来就是处理内容:

a. 去掉头部的<?php exit('dedecms');?>代码:

$result = str_replace("<?php exit('dedecms');?>\n\r", "", $result);

b. 反串行化内容:

$result = @unserialize ( $result );

反串行化后,就得到了一个数组。

c. 判断这个缓存文件内容是否已经过期:通过$result['timeout']的值判断,若这个值小于当前时间,说明这个内容已经过期了,过期就返回false 。

d.返回$result ['data']值,也就是本例子中的“织梦:www.xxx.com”。


网友评论