国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > PHP > 正文

談PHP生成靜態(tài)頁面

2024-05-04 23:04:02
字體:
供稿:網(wǎng)友

一、引 言

在速度上,靜態(tài)頁面要比動(dòng)態(tài)頁面的比方php快很多,這是毫無疑問的,但是由于靜態(tài)頁面的靈活性較差,如果不借助數(shù)據(jù)庫或其他的設(shè)備保存相關(guān)信息的話,整體的管理上比較繁瑣,比方修改編輯.比方閱讀權(quán)限限制等,但是,對(duì)應(yīng)一些我們經(jīng)常頻頻使用的文件,比方說,開發(fā)的新聞發(fā)布系統(tǒng),我們不希望很多用戶都讀取數(shù)據(jù)庫才顯示結(jié)果,這樣一方面消耗了服務(wù)器的資源,另一方面占去了瀏覽者大量可貴的響應(yīng)時(shí)間,所有,有了"靜態(tài)頁面話"的做法,當(dāng)前很多網(wǎng)站都采用這種技術(shù),一般都是由管理后臺(tái)控制,或者生成html直接顯示,或者xhtml用css控制顯示,或者生成xml用xslt顯示,這些技術(shù)都不是難的,在這里我就淺顯的說說生成html的方法.

二、預(yù)備知識(shí) 

模板技術(shù):

[php] 模板引擎smarty深入淺出介紹  --2005-12-31
[php] 笑談配置,使用smarty技術(shù)        --2006-01-04

緩存技術(shù):   

有些信息比方經(jīng)常不變的,但是還是能變的信息放在緩存中以加快顯示速度,這是很有價(jià)值的,所謂的緩存,通俗的理解就是一些保存在服務(wù)器端的共用信息.它是于服務(wù)器同生死的,我們?cè)诒4婢彺娴臅r(shí)候可以指定下次更新的時(shí)間的判斷,比方要在5分鐘更新一次,可以記錄上次更新的時(shí)間,和當(dāng)前時(shí)間比較,如果大于 5 分鐘 ,讀取數(shù)據(jù)庫,更新?lián)Q成,否則直接讀取緩存數(shù)據(jù),當(dāng)然,緩存需要客戶端用戶激活的,只需一次.

ob_start()函數(shù):打開輸出緩沖區(qū).
    函數(shù)格式 void ob_start(void)
    說明:當(dāng)緩沖區(qū)激活時(shí),所有來自php程序的非文件頭信息均不會(huì)發(fā)送,而是保存在內(nèi)部緩沖區(qū)。為了輸出緩沖區(qū)的內(nèi)容,可以使用ob_end_flush()或flush()輸出緩沖區(qū)的內(nèi)容。

flush:刷新緩沖區(qū)的內(nèi)容,輸出。
    函數(shù)格式:flush()
    說明:這個(gè)函數(shù)經(jīng)常使用,效率很高。

ob_get_contents :返回內(nèi)部緩沖區(qū)的內(nèi)容。
    函數(shù)格式:string ob_get_contents(void)
    說明:這個(gè)函數(shù)會(huì)返回當(dāng)前緩沖區(qū)中的內(nèi)容,如果輸出緩沖區(qū)沒有激活,則返回 false.

ob_get_length:返回內(nèi)部緩沖區(qū)的長度。
    函數(shù)格式:int ob_get_length(void)
    說明:這個(gè)函數(shù)會(huì)返回當(dāng)前緩沖區(qū)中的長度;和ob_get_contents一樣,如果輸出緩沖區(qū)沒有激活,則返回 false.

ob_end_clean:刪除內(nèi)部緩沖區(qū)的內(nèi)容,并且關(guān)閉內(nèi)部緩沖區(qū)
    函數(shù)格式:void ob_end_clean(void)
    說明:這個(gè)函數(shù)不會(huì)輸出內(nèi)部緩沖區(qū)的內(nèi)容而是把它刪除

ob_end_flush:發(fā)送內(nèi)部緩沖區(qū)的內(nèi)容到瀏覽器,并且關(guān)閉輸出緩沖區(qū)
    函數(shù)格式:void ob_end_flush(void)
    說明:這個(gè)函數(shù)發(fā)送輸出緩沖區(qū)的內(nèi)容(如果有的話)

ob_implicit_flush:打開或關(guān)閉絕對(duì)刷新
    函數(shù)格式:void ob_implicit_flush ([int flag])
    說明:默認(rèn)為關(guān)閉緩沖區(qū),打開絕對(duì)輸出后,每個(gè)腳本輸出都直接發(fā)送到瀏覽器,不再需要調(diào)用 flush()    

文件寫入:   

int fwrite ( resource handle, string string [, int length] )
fwrite() 把 string 的內(nèi)容寫入 文件指針 handle 處。 如果指定了 length,當(dāng)寫入了 length 個(gè)字節(jié)或者寫完了 string 以后,寫入就會(huì)停止,視乎先碰到哪種情況。
fwrite() 返回寫入的字符數(shù),出現(xiàn)錯(cuò)誤時(shí)則返回 false 。
相關(guān)參考官方網(wǎng)站: 文件參考

三、解決方案

思路:開啟 ob_start緩沖,當(dāng)已經(jīng)調(diào)出數(shù)據(jù)的時(shí)候獲取 ob_get_contents,然后生成靜態(tài)頁,ob_end_clean清除緩沖.ok,就這么來,來看一個(gè)例子(php+mysql的結(jié)合):

創(chuàng)建數(shù)據(jù)庫:

create table `bihtml` (
  `id` int(11) not null auto_increment,
  `szdtitle` varchar(16) not null,
  `szdcontent` text not null,
  primary key  (`id`) 
) type=myisam;

獲取當(dāng)前的id,并導(dǎo)入模板:

ob_start();
$id=_post['id']
if(!isset($id)&&is_integer($id))
{
 @$db=new mysqli('localhost','root','admin','bihtml');
 $result=$db->fetch_one_array("select  * from szd_bi where id='$id'");
   if(!empty($result))
   { 
   $tmp->assign(array(
    "szdtitle",htmlspecialchars($result['titles']),
    "szdcontent",$result['titles']));
   }
 $tpl->display('default_1.tpl');
 $this_my_f= ob_get_contents(); //此處關(guān)鍵
 ob_end_clean();
 $filename = "$id.html";
 if(tohtmlfile_cjjer($filename,$this_my_f))
 echo "生成成功 $filename";
 else
 echo "生成識(shí)別";
 }
}

//把生成文件的過程寫出函數(shù)
function tohtmlfile_cjjer($file_cjjer_name,$file_cjjer_content)
{
 if (is_file ($file_cjjer_name)){
  @unlink ($file_cjjer_name);
 }
$cjjer_handle = fopen ($file_cjjer_name,"w");
 if (!is_writable ($file_cjjer_name)){
  return false;
 }
 if (!fwrite ($cjjer_handle,$file_cjjer_content)){
  return false;
 }
fclose ($cjjer_handle); //關(guān)閉指針
return $file_cjjer_name;
}

四、說明事項(xiàng)

1: 一般建議管理員添加數(shù)據(jù)的時(shí)候就生成靜態(tài)頁面,可以考慮記錄生成的文件名次和路徑.

2: php主要是    ob_starts()和 ob_get_contents,生成靜態(tài)頁面的時(shí)候很有用,當(dāng)然也可以考慮調(diào)出數(shù)據(jù)庫直接替換模板里面的變量也是可以的.

3: 主要的模板使用smarty,phplib都是可以的,smarty使用比較簡易.

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 汉源县| 易门县| 开化县| 江西省| 四平市| 滕州市| 梁山县| 弋阳县| 肃宁县| 浙江省| 化州市| 年辖:市辖区| 上高县| 安岳县| 甘泉县| 南溪县| 冕宁县| 巴东县| 绥宁县| 额济纳旗| 建德市| 南江县| 房产| 平远县| 织金县| 体育| 多伦县| 永城市| 永年县| 兴安盟| 锦州市| 锦屏县| 西安市| 唐山市| 双辽市| 佛冈县| 碌曲县| 菏泽市| 察哈| 凤阳县| 遂溪县|