PHP靜態頁面生成

2021-06-16 07:30:24 字數 3147 閱讀 7351

一、靜態頁面的好處:

在速度上,靜態頁面要比動態頁面的比方php

快很多,這是毫無疑問的,但是由於靜態頁面的靈活性較差,如果不借助資料庫

或其他的裝置儲存相關資訊的話,整體的管理上比較繁瑣,比方修改編輯.比方閱讀許可權限制等,但是,對應一些我們經常頻頻使用的檔案,比方說,開發的新聞發布系統,我們不希望很多使用者都讀取資料庫才顯示結果,這樣一方面消耗了伺服器

的資源,另一方面占去了瀏覽者大量可貴的響應時間,所有,有了"靜態頁面話"的做法,當前很多**都採用這種技術,一般都是由管理後台控制,或者生成html直接顯示,或者xhtml

用css

控制顯示,或者生成xml用xslt

顯示,這些技術都不是難的,在這裡我就淺顯的說說生成html的方法.

二、預備知識

快取技術:

有些資訊比方經常不變的,但是還是能變的資訊放在快取中以加快顯示速度,這是很有價值的,所謂的快取,通俗的理解就是一些儲存在伺服器端的共用資訊.它是於伺服器同生死的,我們在儲存快取的時候可以指定下次更新的時間的判斷,比方要在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的結合):

建立資料庫:

`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))

$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)

$cjjer_handle = fopen ($file_cjjer_name,"w");

if (!is_writable ($file_cjjer_name))

if (!fwrite ($cjjer_handle,$file_cjjer_content))

fclose ($cjjer_handle); //關閉指標

return $file_cjjer_name;

aspx頁面生成靜態頁面

通過aspx頁面生成靜態頁面,在 cs檔案重寫page的render方法,接收頁面通過請求返回的hmtl 然後再另存為 html模板 如下 方法一 把本頁面生成html頁面 protected override void render htmltextwriter writer 方法二 請求其它頁面...

asp生成靜態頁面 生成html

網頁生成靜態html檔案有許多好處,比如生成html網頁有利於被搜尋引擎收錄,不僅被收錄的快還收錄的全.前台脫離了資料訪問,減輕對資料庫訪問的壓力,加快網頁開啟速度.像www.aspid.cn的主站就採用了tsys生成html檔案 所以吟清最近對生成html比較感興趣,看了不少文章,也有一點點收穫....

靜態頁面生成那些事

相信在網際網路企業或多或少都有一些需要生成靜態頁面的需求,下面就來談談我在專案裡面遇到的生成靜態頁面的問題 最初使用httpurlconnection指定url向伺服器發起乙個連線請求,請求成功後從connection物件獲取輸入流,然後將輸入流內容寫入指定的檔案,開發階段發布到測試伺服器 內網 沒...