找防水抓漏工程機會,線上超過上百筆精選防水抓漏案件,無論接案新手
專職SOHO、接案工作室、公司,都能
油漆工程專業鐵皮屋搭建工程,自有工廠料實在
多年專業打造堅固美觀鐵皮屋,免費到府丈量估價

首頁  •  j2h 論壇 • 程式設計討論     • 

PHP生成靜態頁面[轉]

房東:小弟
發表時間:2007-01-30


PHP生成靜態頁面[轉]
一、引 言

在速度上,靜態頁面要比動態頁面的比方php快很多,這是毫無疑問的,但是由於靜態頁面的靈活性較差,如果不借助數據庫或其他的設備儲存相關訊息的話,整體的管理上比較繁瑣,比方修改編輯.比方閱讀權限限制等,但是,對應一些我們經常頻頻使用的檔案,比方說,開發的新聞發布系統,我們不希望很多用戶都讀取數據庫才顯示結果,這樣一方面消耗了伺服器的資源,另一方面佔去了瀏覽者大量可貴的附應時間,所有,有了"靜態頁面話"的做法,當前很多網站都採用這種技術,一般都是由管理後台控制,或者生成html直接顯示,或者xhtml用css控制顯示,或者生成xml用xslt顯示,這些技術都不是難的,在這裡我就淺顯的說說生成html的方法.

二、預備知識

模板技術:

[PHP] 模板引擎Smarty深入淺出介紹 --2005-12-31
[PHP] 笑談配置,使用Smarty技術 --2006-01-04

緩存技術:

有些訊息比方經常不變的,但是還是能變的訊息放在緩存中以加快顯示速度,這是很有價值的,所謂的緩存,通俗的理解就是一些儲存在伺服器端的共用訊息.它是於伺服器同生死的,我們在儲存緩存的時候可以指定下次更新的時間的判斷,比方要在5分鐘更新一次,可以記錄上次更新的時間,和當前時間比較,如果大於 5 分鐘 ,讀取數據庫,更新換成,否則直接讀取緩存數據,當然,緩存需要客戶端用戶激活的,只需一次.

ob_start()函數:打開輸出緩沖區.
函數格式 void ob_start(void)
說明︰當緩沖區激活時,所有來自PHP程式的非檔案頭訊息均不會發送,而是儲存在內部緩沖區。為了輸出緩沖區的內容,可以使用ob_end_flush()或flush()輸出緩沖區的內容。

Flush︰刷新緩沖區的內容,輸出。
函數格式︰flush()
說明︰這個函數經常使用,效率很高。

ob_get_contents ︰返回內部緩沖區的內容。
函數格式︰string ob_get_contents(void)
說明︰這個函數會返回當前緩沖區中的內容,如果輸出緩沖區沒有激活,則返回 FALSE.

ob_get_length︰返回內部緩沖區的長度。
函數格式︰int ob_get_length(void)
說明︰這個函數會返回當前緩沖區中的長度;和ob_get_contents一樣,如果輸出緩沖區沒有激活,則返回 FALSE.

ob_end_clean︰刪除內部緩沖區的內容,並且關閉內部緩沖區
函數格式︰void ob_end_clean(void)
說明︰這個函數不會輸出內部緩沖區的內容而是把它刪除

ob_end_flush:發送內部緩沖區的內容到瀏覽器,並且關閉輸出緩沖區
函數格式︰void ob_end_flush(void)
說明︰這個函數發送輸出緩沖區的內容(如果有的話)

ob_implicit_flush︰打開或關閉絕對刷新
函數格式︰void ob_implicit_flush ([int flag])
說明︰預設為關閉緩沖區,打開絕對輸出後,每個腳本輸出都直接發送到瀏覽器,不再需要調用 flush()

檔案寫入:

int fwrite ( resource handle, string string [, int length] )
fwrite() 把 string 的內容寫入 檔案指標 handle 處。 如果指定了 length,當寫入了 length 個位元組或者寫完了 string 以後,寫入就會停止,視乎先碰到哪種情況。
fwrite() 返回寫入的字符數,出現錯誤時則返回 FALSE 。
相關參考官方網站: 檔案參考

三、解決方案

思路:開啟 ob_start緩沖,當已經調出數據的時候獲取 ob_get_contents,然後生成靜態頁,ob_end_clean清除緩沖.ok,就這么來,來看一個例子(php+mysql的結合):

創建數據庫:

CREATE TABLE `bihtml` (
`id` int(11) NOT NULL auto_increment,
`szdtitle` varchar(16) NOT NULL,
`szdcontent` text NOT NULL,
PRIMARY KEY (`id`)
) TYPE=MyISAM;

獲取當前的ID,並匯入模板:






四、說明事項

1: 一般建議管理員添加數據的時候就生成靜態頁面,可以考慮記錄生成的檔案名次和路徑.

2: php主要是 ob_starts()和 ob_get_contents,生成靜態頁面的時候很有用,當然也可以考慮調出數據庫直接替換模板裡面的變量也是可以的.

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





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(); //此處關鍵
ob_end_clean();
$filename = "$id.html";
if(tohtmlfile_cjjer($filename,$this_my_f))
echo "生成成功 $filename";
else
echo "生成識別";
}
}

//把生成檔案的過程寫出函數
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); //關閉指標
return $file_cjjer_name;
}




  • 贊助網站       

    廣利不動產-板橋在地生根最實在--新板特區指名度最高、值得您信賴的好房仲
    完整房訊,房屋、店面熱門精選物件,廣利不動產 優質仲介,房屋租賃、買賣資訊透明,交易真安心!
    廣利不動產-新板特區指名度最高、值得您信賴的好房仲
    您的托付,廣利用心為您服務



  •  共 0 人回應

    姓名:
    佈告內容:
    其他選項: