http://www.7880.com/Info/Article-369f2780.html

解决方案 »

  1.   

    静态页面的生成一般有这么几个思路了。。
    1。程序编写过程中。不使用直接输出的语句。而时将所有的输出连接至输出字符串,输出完成后。再直接将输出字符串内容写入文件
    2。编写中按照正常的方式编写。通过ob函数组捕获输出。然后将输出写入文件
    3。使用模板类时,用get/fetch一类的方法获取输出。并写入文件。具体实现上又有这两种方法
    1。管理后台添加记录时,直接生成目标html页面,并且前台调用连接直接指向生成的html页面。这种方法程优点是程序效率最高。服务器负荷轻,不过由于生成的是纯静态页面,一旦页面样式上有所改动就必须重新生成所有的内容页。所以实际使用中应用一般不是太多。更多的是使用js,ssi,xml/xsl等客户端手段,生成的静态文件中仅保存数据,不涉及样式,这样能达到速度和维护性的平衡,不过相对前后台程序要复杂些(应用这种方法时,由于内容为纯静态,可以搭配单独编译的纯静态的apache使用。。效率和资源占用上比包含动态内容支持的要更佳)2。前台访问链接指向php程序,php程序首先检查是否存在相应的静态文件。如果静态文件不存在。则生成并重定向至此文件,否则直接重定向。这种方法实际使用中一般和apache的url_rewrite功能一起使用。将php的文件地址重为html的形式,有利于搜索引擎的检索。这种方法在效率上略有损失,不过程序结构简单,便于调整,在访问量不是很大时使用很合适.例如:
    步骤一:
    读出这个新闻,用SMARTY的FETCH()生成的静态页面输出到指定地方,一般文件名指定时间或文件名为HTML文件名头,然后把这个名字写如数据库.
    步骤二:
    再显示这个内容的时候, 判断如果YOU  HTML的名字,那么就显示HTML名字.具体的代码段,等我去了单位给你看:)
      

  2.   

    用了apache的web重新定向功能,就是用了他的rewrite模块,可以通过配置apache简单的实现.具体的可以看看apache手册
      

  3.   

    class html
    {
        var $dir;        //文件存放目录,目录名(不带/)
        var $rootdir;    //html文件存放根目录,目录名(不带/)
        var $name;       //html文件存放路径
        var $dirname;    //指定的文件夹名称
        var $url;        //获取html文件信息的来源网页地址
        var $time;       //html文件信息填加时的时间
        var $dirtype;    //目录存放方式
        var $nametype;   //html文件命名方式    function html($nametype='name',$dirtype='year',$rootdir='html')
        {
            $this->setvar($nametype,$dirtype,$rootdir);
        }    function setvar($nametype='name',$dirtype='year',$rootdir='html')
        {
          $this->rootdir=$rootdir;
          $this->dirtype=$dirtype;
          $this->nametype=$nametype;
        }    function createdir($dir='')
        {
            $this->dir=$dir?$dir:$this->dir;        if (!is_dir($this->dir))
            {
                $temp = explode('/',$this->dir);
                $cur_dir = '';
                for($i=0;$i<count($temp);$i++)
                {
                    $cur_dir .= $temp[$i].'/';
                    if (!is_dir($cur_dir))
                    {
                    @mkdir($cur_dir,0777);
                    }
                }
            }
        }    function getdir($dirname='',$time=0)
        {
            $this->time=$time?$time:$this->time;
            $this->dirname=$dirname?$dirname:$this->dirname;        switch($this->dirtype)
            {
            case 'name':
            if(empty($this->dirname))
               $this->dir=$this->rootdir;
            else
               $this->dir=$this->rootdir.'/'.$this->dirname;
            break;
            case 'year':
            $this->dir=$this->rootdir.'/'.date("Y",$this->time);
            break;        case 'month':
            $this->dir=$this->rootdir.'/'.date("Y-m",$this->time);
            break;        case 'day':
            $this->dir=$this->rootdir.'/'.date("Y-m-d",$this->time);
            break;
            }        $this->createdir();        return $this->dir;
        }    function geturlname($url='')
        {
            $this->url=$url?$url:$this->url;        $filename=basename($this->url);
            $filename=explode(".",$filename);
            return $filename[0];
        }    function geturlquery($url='')
        {
            $this->url=$url?$url:$this->url;        $durl=parse_url($this->url);
            $durl=explode("&",$durl[query]);
            foreach($durl as $surl)
            {
              $gurl=explode("=",$surl);
              $eurl[]=$gurl[1];
            }
            return join("_",$eurl);
        }    function getname($url='',$time=0,$dirname='')
        {
            $this->url=$url?$url:$this->url;
            $this->dirname=$dirname?$dirname:$this->dirname;
            $this->time=$time?$time:$this->time;        $this->getdir();        switch($this->nametype)
            {
            case 'name':
            $filename=$this->geturlname().'.htm';
            $this->name=$this->dir.'/'.$filename;
            break;        case 'time':
            $this->name=$this->dir.'/'.$this->time.'.htm';
            break;        case 'query':
            $this->name=$this->dir.'/'.$this->geturlquery().'.htm';
            break;        case 'namequery':
            $this->name=$this->dir.'/'.$this->geturlname().'-'.$this->geturlquery().'.htm';
            break;        case 'nametime':
            $this->name=$this->dir.'/'.$this->geturlname().'-'.$this->time.'.htm';
            break;        }
            return $this->name;
        }    function createhtml($url='',$time=0,$dirname='',$htmlname='')
        {
            $this->url=$url?$url:$this->url;
            $this->dirname=$dirname?$dirname:$this->dirname;
            $this->time=$time?$time:$this->time;
          
            if(empty($htmlname))
                $this->getname();
            else
                $this->name=$dirname.'/'.$htmlname;        $content=file($this->url) or die("Failed to open the url ".$this->url." !");;
            $content=join("",$content);
            $fp=@fopen($this->name,"w") or die("Failed to open the file ".$this->name." !");
            if(@fwrite($fp,$content))
            return true;
            else
            return false;
            fclose($fp);
        }    function deletehtml($url='',$time=0,$dirname='')
        {
            $this->url=$url?$url:$this->url;
            $this->time=$time?$time:$this->time;        $this->getname();        if(@unlink($this->name))
            return true;
            else
            return false;
        }    /**
         * function::deletedir()
         * 删除目录
         * @param $file 目录名(不带/)
         * @return 
         */
         function deletedir($file)
         {
            if(file_exists($file))
            {
                if(is_dir($file))
                {
                    $handle =opendir($file);
                    while(false!==($filename=readdir($handle)))
                    {
                        if($filename!="."&&$filename!="..")
                          $this->deletedir($file."/".$filename);
                    }
                    closedir($handle);
                    rmdir($file);
                    return true;
                }
                else 
                {
                    unlink($file);
                }
            }
        }}
      

  4.   

    用apache的web重新定向功能
    可以解决吧
    试试看
      

  5.   

    有个模版文件,里面有特殊符号比如<topic_title></topic_title>,读出来,把特殊符号替换成动态内容,保存到静态文件。
      

  6.   

    如果用smarty的话很简单,利用smarty里的fetch
    function makeHtml($tplName, $typeName)
            {
                     $htmlContext = $this->fetch($tplName); 
                     if ($fp = fopen($typeName .".html", "w"))
                     {
                  if (fwrite($fp, $htmlContext))
                            {
                                    fclose($fp);
                            }else
                            {
                                    fclose($fp);
                                    die("对不起,无法写入指定文件: " . $typeName . ".html");
                            }       
                     }else
                     {
                            die("对不起,无法打开指定文件: " . $typeName . ".html");
                     }                
            }
    调用的时间这样:(a.htm是模板文件)
    <?php
    include_once("./lib/mySmarty.php");
    $smarty = new mySmarty();$i="大家好";
    $smarty->assign("itest",$i);$smarty->makeHtml("a.htm", "smartytest");
    header("location:smartytest.html");?>