- 普通 - 未处理
[i=s] 本帖最后由 痛饮狂歌 于 2012-4-16 15:17 编辑 [/i]设置了静态缓存,可就是生成不了缓存文件。查代码,发现ReadHtmlCacheBehavior.class.php中存在两个问题:
1. requireHtmlCache方法
static private function requireHtmlCache() {
$htmls = C('HTML_CACHE_RULES');
if(!empty($htmls)) {
$moduleName = strtolower(MODULE_NAME);
if(isset($htmls[$moduleName.':'.ACTION_NAME])) {
首先获取配置文件中的静态缓存规则配置,在将根据URL参数得到的模块名转换成小写后,再进行一系列的规则匹配比较。问题是在静态缓存规则配置中,按约定,模块名是首字母大写的,也就造成了不可能匹配成功。
解决方法:
将静态缓存规则数组中的数组键也都转换成小写:
$htmls = array_change_key_case(C('HTML_CACHE_RULES'));
2. run方法
public function run(&$params){
if(C('HTML_CACHE_ON')) {
if(($cacheTime = $this->requireHtmlCache()) && $this->checkHTMLCache(HTML_FILE_NAME,$cacheTime)) {
readfile(HTML_FILE_NAME);
requireHtmlCache 方法若成功,返回的是缓存时间,在用户设置缓存时间为0(即永久缓存)的情况下,返回的缓存时间 0 在逻辑比较中是当作false看待的,那么也就是说永久缓存实际上因为run方法永远不会执行到读取缓存文件那一步而根本没缓存。
解决方法:
$cacheTime = $this->requireHtmlCache();
if(($cacheTime !== false) && $this->checkHTMLCache(HTML_FILE_NAME,$cacheTime)) {
