PHP生成靜態頁

2021-04-22 07:31:17 字數 4220 閱讀 3181

最近作的乙個專案中用到了兩種用

php

生成靜態頁面的

方法

,回想起當初自己還不知道如何生成靜態頁面的迷惘,以及看不懂高手寫的文章的痛苦,覺得自己有必要站出來為還不知道如何生成靜態頁的phper寫乙個通俗點文章,以幫助他們盡快掌握這個好東西。

在我之前所見的文章中要不是用

**

堆砌空間就是用高手與高手交流用的語言讓新人望而生卻。因此本文盡量把整體思路說得詳盡點。

兩種方法簡單說明如下:

1. 使用檔案函式得到靜態頁面的模板字串,然後用str_replace函式將需要替換的東西替換了再寫入到新的檔案中。

2. 利用php的輸出控制函式(output control)得到靜態頁面字串,再寫入到新的檔案中。

下面開始詳細的說明。

一. 利用模板生成

什麼是模板?如果大家使用過dreamwerver中的「另存為模板」就應該知道模板是用來統一風格的東西。它只讓你修改頁面的某一部分,當然這「某一部分」是由你來確定的。本文在這說的模板也就是這個意思。(此外,php模板

技術

還包括phplib、

smarty

等等,這不是本文所說內容了)

把模板的概念結合本文再說得具體一點就是:美工先做好乙個頁面,然後我們把這個頁面當作模板(要注意的是這個模板就沒必要使用editregion3這樣的**了,這種**是dreamwerver為了方便自己設計而弄的標識),把這個模板中我們需要改變的地方用乙個與

html

可以區分的字元代替,如「」、「[title]」。在生成靜態頁面的時候只需要把資料和這些字串替換即可。這就是模板的含義了。

下面來說一下具體的實現思路:做乙個模板――在模板裡面把需要改變的地方用特殊的字元代替――將模板中的內容取出來存放到乙個字串中(這個字串的內容就是html**和上面所說的特殊字元了)――使用函式將這個字串裡面的特殊字元用我們需要在頁面上顯示的內容替換――把替換後的字串寫到乙個新的. htm頁面裡面――成功了!

功能的實現離不開php函式的幫忙。知道整體思路後最重要的就是去手冊裡面找相關的函式了。

首先,我們要把模板裡面的html**取出來放到乙個變數中去,這個變數的值就是包含html的字串了。我們可以使用string fread ( int handle, int length )函式來實現,仔細一看裡面的引數「handle」是乙個檔案指標,這意味著我們得先把模板檔案開啟(php這一點相當麻煩,難道它就不能弄得一步到位嗎!!!)。好,我們繼續找能把檔案開啟的函式:resource fopen ( string filename, string mode [, bool use_include_path [, resource zcontext]] ),在這裡我們只要傳入前兩個引數就可以了,第乙個引數就是檔案名字了,記得路徑不要弄錯;第二個引數建議使用「rb」,「r」代表唯讀方式開啟,並將檔案指標指向檔案頭,「b」 是指強制使用二進位制模式,手冊中建議:為移植性考慮,強烈建議在用 fopen() 開啟檔案時總是使用 'b' 標記。

在這一步我們的**可以這樣寫:

code:

<?php

$filemodel

="template/it.php"

;                 

#模板位址

$file

=fopen

($filemodel

,"rb"

);                 

#開啟模板,得到檔案指標

$temp

=fread

($file

,filesize

($filemodel

));         

#得到模板檔案html**

?>

提醒一下:如果你只是想將乙個檔案的內容讀入到乙個字串中,用 file_get_contents(),它的效能比fread()的**好得多(這是手冊上的原話,不過這個函式是在php5中支援的)。

資料庫

中取出的內容或通過表單的得到的資料把模板中的特殊字元替換了。這一步很簡單,也許剛開始想不明白,但是一看**就一目了然了:

code:

<?php

$temp

=str_replace

("[title]"

,$title

,$temp

);?>

上面的「"[title]"」就是模板檔案中的特殊字元(是[title],不是」[title]」),「$title」就是我們想在頁面上顯示的內容,「$temp」就是模板檔案html**了。

如果還需要替換,則繼續使用str_replace()函式就可以了,如:

code:

<?php

$temp

=str_replace

("[posttime]"

,$posttime

,$temp

);$temp

=str_replace

("[content]"

,$content

,$temp

);?>

第三步,也就是第一步的反操作了:要把之前處理過的模板字串寫入另乙個檔案中去,而這個檔案就是我們最終可以對外顯示的頁面。現在重複類似第一步的二部曲:開啟檔案,寫入檔案:

code:

<?php

fwrite

(fopen

("$filename"

,"wb"

),$temp

);#$filename是靜態頁面的檔名

?>

fwrite的作用就是把字串的內容寫入檔案中去了。

同樣,也可以使用file_put_contents函式寫檔案,但記得是在php5中。

這樣,我們就可以用模板生成靜態頁面了。

二. 利用輸出控制函式(output control)生成靜態頁面

這個與用模板生成的相比相對高階一點,但一旦明白了它的實現思路,卻是簡單無比,所謂會者不難,難者不會大概就是這麼一回事吧。

這種方法比模板生成的方法應用面更大。使用模板生成方法一般用於發表或修改文章時使用,這樣的話資料庫可以直接從表單得到,就無須通過資料庫了。當如果需要從資料庫取出資料,並且替換的東西比較多,更或者你需要的頁面並不僅僅是通過簡單的替換就能得到的,比如說站點的首頁。這時,就有必要考慮使用輸出控制函式了。

輸出控制函式的作用是設定緩衝區,在緩衝區裡面輸出的內容可以被獲得。獲得輸出內容整個過程只需要使用三個函式便可以了:ob_start()、ob_get_contents()、ob_end_clean()

方法思路如下:設定緩衝區起點(或設定輸出內容的起點)――釋放內容――取得內容――清空緩衝區――把取得的內容寫如檔案。

1、ob_start :開啟輸出緩衝區   

函式格式:void ob_start(void)   

說明:當緩衝區啟用時,所有來自php程式的非檔案頭資訊均不會傳送,而是儲存在內部緩衝區。  

為了輸出緩衝區的內容,可以使用ob_end_flush()或flush()輸出緩衝區的內容。   

2 、ob_get_contents :返回內部緩衝區的內容。   

使用方法:string ob_get_contents(void)   

說明:這個函式會返回當前緩衝區中的內容,如果輸出緩衝區沒有啟用,則返回 false 。  

3、ob_end_clean:刪除內部緩衝區的內容,並且關閉內部緩衝區   

使用方法:void ob_end_clean(void)   

說明:這個函式不會輸出內部緩衝區的內容而是把它刪除!

精彩開始了,看看我們是如何利用輸出緩衝生成靜態頁面的:

我們用函式來實現吧!

code:

<?php

#write by yayu

function

createstaticpage

($sourcepage

,$objectpage

)#**檔案,目標檔案

?>

總結:1. 兩種方法都有把內容寫入你要生成的靜態頁面中的一步。

2. 當可以使用第一種方法時就使用第一種方法,因為第二種方法要通過資料庫調內容並顯示(也可以說是隱藏了顯示的內容,但事實上$sourcepage裡的程式是執行的)的過程。

3. 具體情況其他分析,在使用模板生成時由於可能直接使用表單提交的內容,所以需要過濾之類的檢查。

php生成靜態頁

先建立一chtml資料庫 表名稱為bihtml create table bihtml id int 11 auto increment not null,szdtitle varchar 30 szdcontent text primary key id 在表中插入兩條記錄 insert into...

PHP生成靜態頁

複製 如下 程式設計客棧 function makedir mudir 建立目錄 function writemod filemodname 先創子摸板檔案路徑 function writeweb content,web,modfile 更新各自的子摸板檔案 modfile是子摸板名字 nbs m ...

php開始頁,php簡單靜態頁生成過程

一直用smarty的cache,但感覺還是要自己做乙個,才有感覺。網上有很多牛人的功能比較完備,打算先自己搞簡單的再慢慢豐滿。這兩天做了乙個比較簡單的,在hi.baidu.net alex wang58記錄一下。mod rewrite rewritecond,rewriterule 位址重寫,ob系...