天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

用libTemplate實(shí)現(xiàn)靜態(tài)網(wǎng)頁的生成

作者:iwind

原來在dev-club發(fā)表的一篇文章,將怎么用模板處理程序phplib 中的template.inc實(shí)現(xiàn)靜態(tài)網(wǎng)頁的生成,呵呵,居然被列入精華,并被多個網(wǎng)站轉(zhuǎn)載,想來這是榮幸。其實(shí)網(wǎng)上這方面的東西很多了,我上此發(fā)布的所謂IAMS( iwind 文章管理系統(tǒng)),里面也有,有心人可以看一下。下面我只是簡要在總結(jié)一次。

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

這樣就把這個動態(tài)頁面的內(nèi)容寫入了靜態(tài)頁面,$targetFile.像有的網(wǎng)站首頁內(nèi)容很多,要調(diào)用n多個查詢語句時,不妨定時生成靜態(tài)網(wǎng)頁,既大幅提高了訪問速度,也減輕了服務(wù)器負(fù)擔(dān)。

你可以看出來,我用ob_只是處理單個頁面,對于批量寫入或更新多個頁面,這個方法就不行了。這就是我要講的第三種方法,用模板。模板是個好東東,現(xiàn)在大家都或多或少在用它,建議還不會簡單模板處理的網(wǎng)友,花點(diǎn)時間去學(xué)它,一般的模板處理程序都很簡單的。用模板實(shí)現(xiàn)靜態(tài)網(wǎng)頁的生成是非常簡單的,方法就是獲取分析結(jié)果,把分析結(jié)果寫入文件。下面就以phplib中的template.inc來談?wù)勅绻媚0迳伸o態(tài)網(wǎng)頁。

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

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

二,實(shí)現(xiàn)靜態(tài)網(wǎng)頁生成。
<?php
$itpl->set_file(“main”,”mian.tpl”);
//分析模板變量
…..
//分析mainmains
$tpl->parse("mains","main");
//把分析結(jié)果mains存入main.html
$tpl->savetofile("main.html","mains");
//置空
$tpl->renew();//至關(guān)重要
?>

呵呵,是不是很簡單,main.html就是我們要的內(nèi)容。下面是一個結(jié)合數(shù)據(jù)庫的例子,并用函數(shù)封裝了起來。
<?php
//$aid是數(shù)據(jù)庫中的文章id,$table是表名稱,$template是模板地址,$tpl是template.inc的一個實(shí)例
//每一個aid對應(yīng)一個靜態(tài)網(wǎng)頁地址,都存在一個數(shù)據(jù)表中
//表的結(jié)構(gòu)類似于 aid     target       title
//                1     a1.html     ….
//                2     a2.html     ….
//                3     a3.html     ….
function staticInfo($aid){
   global $table,$template,$tpl;
   //查詢數(shù)據(jù)庫
   $res=mysql_query(“select * from $table where aid='$aid'”);
   //取出數(shù)據(jù)
   $array=mysql_fetch_array($res);
   //讀靜態(tài)網(wǎng)頁地址,標(biāo)題。
   $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();
}
?>

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

三,更新靜態(tài)網(wǎng)頁
一篇文章加入數(shù)據(jù)庫后,由于一些原因我們總要修改一些文章。這時候,只要把相應(yīng)的靜態(tài)網(wǎng)頁重新生成一次即可。這是非常方便的,因?yàn)楸碇幸呀?jīng)有了靜態(tài)網(wǎng)頁的目標(biāo)地址target字段。

可以看出關(guān)鍵所在,一篇文章生成靜態(tài)網(wǎng)頁的關(guān)鍵所在就是$template(模板地址),$target(目標(biāo)地址)。前者,我們可以先確定,后者可以由你隨心所欲的為每篇文章設(shè)置一個地址。常用的有1,時間戳 2,時分秒 3,根據(jù)文章id。因?yàn)檫@些重復(fù)的機(jī)會會非常小的。

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

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

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

或許你對生成靜態(tài)的文章列表感到困惑,其實(shí)方法是一樣的,就是 計(jì)算頁碼 分析每個頁碼的內(nèi)容  寫入文件。 分析每個頁碼的內(nèi)容,當(dāng)然是寫個函數(shù)咯,如果你一頁一頁的生成,恐怕被人嘲笑 ^_^。

靜態(tài)網(wǎng)頁不僅僅是可以減輕服務(wù)器負(fù)擔(dān),提高訪問速度,也可以方便地做鏡像網(wǎng)站,方便地備份,減少被攻擊損失程度,加快還原速度。當(dāng)然靜態(tài)網(wǎng)頁也會給大家?guī)碇T多不便的地方,你需要在動態(tài)和靜態(tài)之間做出平衡,也可以在靜態(tài)網(wǎng)頁中加入js調(diào)用的php代碼,來達(dá)到計(jì)數(shù),即時更新等目的。(完)

php技術(shù)用libTemplate實(shí)現(xiàn)靜態(tài)網(wǎng)頁的生成,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: WWW夜片内射视频在观看视频 | 赤兔CHINESE最新男18GUY | 久久精品亚洲国产AV涩情 | 久久AAAA片一区二区 | 国产精品久久久久婷婷五月色婷婷 | 国产亚洲精品 在线视频 香蕉 | 国产AV麻豆出品在线播放 | 中文无码字慕在线观看 | 动漫H片在线播放免费高清 动漫AV纯肉无码AV电影网 | 人人舔人人爱 | 香蕉97超级碰碰碰碰碰久 | 草莓视频在线观看免费观看高清 | 毛片免费在线 | 99视频在线看观免费 | 吃奶摸下的激烈免费视频 | 色人阁久久 | 农民工老头在出租屋嫖老熟女 | 永久免费无码AV国产网站 | 韩国演艺圈悲惨在线 | 免费三级黄色 | 人人碰在线视频 | 亚洲午夜AV久久久精品影院色戒 | 久久99re6国产在线播放 | 国产午夜精品不卡观看 | 国产精品欧美一区二区在线看 | 色欲AV精品人妻一区二区麻豆 | 欧美视频 亚洲视频 | 99热这里只有精品视频2 | 九九热久久只有精品2 | 动漫美女被爆挤奶歪歪漫画 | 国产精品久久久久永久免费看 | 欧美videos人牛交 | 四虎4hu亚洲精品 | 高H高肉强J短篇校园 | 亚洲色婷婷久久精品AV蜜桃久久 | 在线观看成人免费 | 国产亚洲精品 在线视频 香蕉 | 海角国精产品一区一区三区糖心 | 国产伦精品一区二区三区免费观看 | 色综合欧美色综合七久久 | 一攻多受h嗯啊巨肉bl巨污 |