不知道为什么..我也不能............但其它人能.......郁闷ING..............

解决方案 »

  1.   

    楼上发现原因没?我用的是分块缓存,到现在还没搞定。我正在尝试把那个output放在分块缓存的if判断里面,不过好像也是无效。
      

  2.   


    function use_cache ( $key = '' )
    {
    if (empty($_POST))
    {
    $this->cache_filename  =  $this->cache_dir . 'cache_' . md5($_SERVER['REQUEST_URI'] . serialize($key)) . '.ser';
    if (($_SERVER['HTTP_CACHE_CONTROL'] != 'no-cache')  &&  ($_SERVER['HTTP_PRAGMA'] != 'no-cache')  &&  @is_file($this->cache_filename))
    {
    if ((time() - filemtime($this->cache_filename)) < $this->cache_lifetime)
    {
    readfile($this->cache_filename);
    exit;
    }
    }
    ob_start( array( &$this, 'cache_callback' ) );
    }
    }可知,缓存的充分必要条件是:
    1、不是提交页面 if(empty($_POST))
    2、没有声明不使用浏览器缓存 $_SERVER['HTTP_CACHE_CONTROL'] != 'no-cache')  &&  ($_SERVER['HTTP_PRAGMA'] != 'no-cache'
    3、目标文件名不于目录冲突 @is_file($this->cache_filename)use_cache 方法只完成简单的缓存的工作,如果需要一些复杂的操作,比如你需要的分块缓存。就需要使用SmartCache类,在class.smartcache.php中定义
      

  3.   

    1、确定不是。
    2、这部分已经让我从类中去掉了。
    3、我的缓存是放在子文件夹cache/下面的,而且它本身还有cache_前缀,应该不会出现重名问题吧?4、我按照之前你教授的分块缓存方法(用if包含use_cache涉及的块部分的代码),发觉似乎原理上也实现不了。因为回调函数只在输出之前进行一次使用,而多个缓存的话(多个回调),是否只作用最后一个?正在看smartcache。
      

  4.   

    SmartCache类和smartemplate里面的cache类基本相同,唯一区别就是对于文件的内容,sc使用了序列化函数(不懂为何)。
      

  5.   

    SmartCache类提供了多种操作缓存的方法,你需要认真的看一下对于use_cache 方法,如果不提供参数$key则一定重名了——md5($_SERVER['REQUEST_URI'] . serialize($key))
    对于一个页面$_SERVER['REQUEST_URI']是唯一的,你不附加其他参数如何产生多个缓存文件呢?执行 use_cache 方法后,如果不显式的关闭缓存,则缓存直到程序结束间的内容我上次所说的方法只是针对你当时的问题提出的变通方案,并不具备普遍意义**** 如果都可以用某些固定的算法来解决实际问题,那么计算机技术也就不会有现在的发展。你也就没有必要去学习计算机技术了!!!