function MakeHtml( $key = '' )
{
if (empty($_POST))
     {
       $this->_strHtmlFileName  =  $this->_strHtmlDir . md5($_SERVER['REQUEST_URI'] . serialize($key)) . '.html';
       if (($_SERVER['HTTP_CACHE_CONTROL'] != 'no-cache')  &&  ($_SERVER['HTTP_PRAGMA'] != 'no-cache')  &&  @is_file($this->_strHtmlFileName))
       {
         if ((time() - filemtime($this->_strHtmlFileName)) < $this->_intCacheLifeTime)
         {
           readfile($this->_strHtmlFileName);
           exit;
         }
       }
       ob_start( array(&$this , 'Callback') ) ;
     }
}



function Callback ( $Buffering )
{
$this->Check_Dir( $this->_strHtmlDir ) ; 
if ($hd = @fopen($this->_strHtmlFileName , "wb"))
      {
       fwrite( $hd , $Buffering );
       fclose( $hd ) ;
     }
     else
     {
       $Buffering = 'failed to open HTML file "' . $this->_strHtmlFileName . '"';
     }
     return $Buffering ;
}以上是我在模板类里面生成HTML页面缓存的函数,但是在Callback的时候创建文件的时候出现问题。
具体问题是:1,$this->Check_Dir( $this->_strHtmlDir ) 这个是检查文件夹,没有则mkdir(),但发现根本不起作用,不能创建文件夹。
2,if ($hd = @fopen($this->_strHtmlFileName , "wb"))的时候没有报错,并且IF成立,既然IF成立,那么文件应该是创建成功了吧。查看路径,没有文件存在。调试:
1,把$this->_strHtmlFileName随便改下(去掉后面一个“e”),if不成立了,执行else;
2, 把@去掉,效果一样。不会报错。还是一样,IF成立。
3,把$this->_strHtmlFileName直接RETURN,有输出正确路径。疑思:
这个是生成HTML的函数,用OB_START方式,是不是回调的时候不能用这样的方式呢?同样在这个CLASS里面,我还有个CACHE函数,这个是生成缓存的,同样我也是用FOPEN来创建写入CACHE文件,完全正常,创建文件夹,创建文件,写入缓存等都很正常。是不是在回调函数里面要特定的写法?求大家赐教!