• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 用libTemplate實現靜態網頁的生成

    發表于:2007-07-14來源:作者:點擊數: 標簽:
    原來在dev-club發表的一篇文章,將怎么用模板處理程序PHPlib 中的template.inc實現靜態網頁的生成,呵呵,居然被列入精華,并被多個網站轉載,想來這是榮幸。其實網上這方面的東西很多了,我上此發布的所謂IAMS( iwind 文章管理系統),里面也有,有心人可以
    原來在dev-club發表的一篇文章,將怎么用模板處理程序PHPlib 中的template.inc實現靜態網頁的生成,呵呵,居然被列入精華,并被多個網站轉載,想來這是榮幸。其實網上這方面的東西很多了,我上此發布的所謂IAMS( iwind 文章管理系統),里面也有,有心人可以看一下。下面我只是簡要在總結一次。

    現在一般說生成靜態網頁的方法有三種,一個是配置服務器,大家可以到http://www.devarticles.com/c/b/PHP/ 去找找看,對于這個很多地方都有的。另外一個是用ob_函數控制輸出。方法如下:先用ob_start();打開輸出緩沖器,然后是對數據的分析,操作等等,跟著用ob_get_contents();獲取緩沖區的內容,然后再寫入文件。根據這個步驟,可以寫出以下程序:
    <?php
    ob_start();
    //主體部分,數據操作,處理,輸出等等。。。
    require”global.php”;
    mysql_connect(“localhost”,”root”,””);
    …..
    //獲取緩沖區內容
    $contents=ob_get_contents();
    //如果不想輸出任何東西,可以加上這句
    ob_end_clean();
    //寫入目的文件
    $fp=@fopen($targetFile,”w+”) or die(“打開文件時出錯”);
    fwrite($fp,$contents);
    ?>

    這樣就把這個動態頁面的內容寫入了靜態頁面,$targetFile.像有的網站首頁內容很多,要調用n多個查詢語句時,不妨定時生成靜態網頁,既大幅提高了訪問速度,也減輕了服務器負擔。

    你可以看出來,我用ob_只是處理單個頁面,對于批量寫入或更新多個頁面,這個方法就不行了。這就是我要講的第三種方法,用模板。模板是個好東東,現在大家都或多或少在用它,建議還不會簡單模板處理的網友,花點時間去學它,一般的模板處理程序都很簡單的。用模板實現靜態網頁的生成是非常簡單的,方法就是獲取分析結果,把分析結果寫入文件。下面就以PHPlib中的template.inc來談談如果用模板生成靜態網頁。

    一, 修改template.inc
    加入以下的幾個函數:
    //將分析結果保存到文件中去
    function savetofile ($dir,$varname){
    $data=$this->finish($this->get_var($varname));
    $fp=fopen($dir,"w+");
    fwrite($fp,$data);
    }
    //清除已賦值數組
    function renew(){
    $this->varkeys=array();
    $this->varvals=array();
    $this->file=array();
    }

    第一個函數是結果保存到靜態文件中,第二個是把所有的模板分析變量都置為空,以免批量處理時相互影響。

    二,實現靜態網頁生成。
    <?php
    $itpl->set_file(“main”,”mian.tpl”);
    //分析模板變量
    …..
    //分析main&#61664;mains
    $tpl->parse("mains","main");
    //把分析結果mains存入main.html
    $tpl->savetofile("main.html","mains");
    //置空
    $tpl->renew();//至關重要
    ?>

    呵呵,是不是很簡單,main.html就是我們要的內容。下面是一個結合數據庫的例子,并用函數封裝了起來。
    <?php
    //$aid是數據庫中的文章id,$table是表名稱,$template是模板地址,$tpl是template.inc的一個實例
    //每一個aid對應一個靜態網頁地址,都存在一個數據表中
    //表的結構類似于 aid target title
    // 1 a1.html ….
    // 2 a2.html ….
    // 3 a3.html ….
    function staticInfo($aid){
    global $table,$template,$tpl;
    //查詢數據庫
    $res=mysql_query(“select * from $table where aid=’$aid’”);
    //取出數據
    $array=mysql_fetch_array($res);
    //讀靜態網頁地址,標題。
    $target=$array[“target”];
    $title=$array[“title”];
    //分析模板
    $tpl->set_file(“main”,$template);
    //把模板中的{title}變量換成$title
    $itpl->set_var(“title”,$title”);
    //分析整個模板
    $itpl->set_var(“mains”,”main”);
    //把mains寫入文件
    $tpl->savetofile($target,"mains");
    //置空
    $tpl->renew();
    }
    ?>

    這樣我們就可以用函數staticInfo()把我們想要處理的任一篇文章都生成靜態網頁。表$target里也可以包含文章內容,作者,來源等等,方法是一樣的。

    三,更新靜態網頁
    一篇文章加入數據庫后,由于一些原因我們總要修改一些文章。這時候,只要把相應的靜態網頁重新生成一次即可。這是非常方便的,因為表中已經有了靜態網頁的目標地址target字段。

    可以看出關鍵所在,一篇文章生成靜態網頁的關鍵所在就是$template(模板地址),$target(目標地址)。前者,我們可以先確定,后者可以由你隨心所欲的為每篇文章設置一個地址。常用的有1,時間戳 2,時分秒 3,根據文章id。因為這些重復的機會會非常小的。

    四,批量生成靜態網頁.
    有了單個文章生成的靜態網頁的函數了,那么批量生成是非常簡單的。就是獲取所有的文章aid,然后套入函數即可。
    <?php
    //引用模板類
    require”template.inc”;
    //引入函數
    require”functions.php”;
    //一些變量的定義
    $table=”art”;
    $template=”template/info.tpl”;
    $tpl=new Template(“.”);
    //連接mysql,選擇數據庫
    mysql_connect(“localhost”,”root’,””);
    mysql_select_db(“article”);
    //發送查詢語句
    $res=mysql_query(“select aid from $table”);
    while($r=mysql_fetch_array($res)){
    $aid=$r[“aid”];
    //生成靜態網頁
    staticInfo($aid);
    }
    //結束
    echo”所有靜態網頁更新/生成成功”;
    ?>

    上面就是完整的例子。我們做cms的流程可以如下:
    1,記者發稿(把稿件內容放入數據庫)
    2,編輯審查(如果他認為可以發布,那么就可以把這些內容生成靜態網頁)
    3,退回稿件(把生成的靜態網頁刪除,把數據庫中的內容刪除)

    然后,我們訪問到的網站內容就都是靜態的了。一個問題就是,這種方法會不會占用很多空間內?http://www.csdn.com.cn 有上千篇文章了,只占用了20M空間。反過來說,如果你有10000篇文章的話,你不會吝嗇到只買200M的空間吧?

    或許你對生成靜態的文章列表感到困惑,其實方法是一樣的,就是 計算頁碼&#61664; 分析每個頁碼的內容 &#61664; 寫入文件。 分析每個頁碼的內容,當然是寫個函數咯,如果你一頁一頁的生成,恐怕被人嘲笑 ^_^。

    靜態網頁不僅僅是可以減輕服務器負擔,提高訪問速度,也可以方便地做鏡像網站,方便地備份,減少被攻擊損失程度,加快還原速度。當然靜態網頁也會給大家帶來諸多不便的地方,你需要在動態和靜態之間做出平衡,也可以在靜態網頁中加入js調用的php代碼,來達到計數,即時更新等目的。

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>