招生熱線
0755-86191118 0755-86191118
我的位置: 首頁(yè) > 學(xué)習(xí)專(zhuān)區(qū) > PHP技術(shù) > PHP技術(shù)生成靜態(tài)頁(yè)面的實(shí)現(xiàn)

PHP技術(shù)生成靜態(tài)頁(yè)面的實(shí)現(xiàn)

2013-04-27 08:35:30
來(lái)源:
[導(dǎo)讀] 一、PHP腳本與動(dòng)態(tài)頁(yè)面。PHP腳本是一種服務(wù)器端腳本程序,可通過(guò)嵌入等方法與HTML文件混合,也可以類(lèi),函數(shù)封裝等形式,以模板的方式對(duì)用戶

一、PHP腳本與動(dòng)態(tài)頁(yè)面。

PHP腳本是一種服務(wù)器端腳本程序,可通過(guò)嵌入等方法與HTML文件混合,也可以類(lèi),函數(shù)封裝等形式,以模板的方式對(duì)用戶請(qǐng)求進(jìn)行處理。無(wú)論以何種方式,它的基本原理是這樣的。由客戶端提出請(qǐng)求,請(qǐng)求某一頁(yè)面 -----> Web服務(wù)器引入指定相應(yīng)腳本進(jìn)行處理 -----> 腳本被載入服務(wù)器 -----> 由服務(wù)器指定的PHP解析器對(duì)腳本進(jìn)行解析形成HTML語(yǔ)言形式 ----> 將解析后的HTML語(yǔ)句以包的方式傳回給瀏覽器。由此不難看出,在頁(yè)面發(fā)送到瀏覽器后, PHP就不存在了,已被轉(zhuǎn)化解析為HTML語(yǔ)句??蛻粽?qǐng)求為一動(dòng)態(tài)文件,事實(shí)上并沒(méi)有真正的文件存在在那里,是PHP解析而成相對(duì)應(yīng)的頁(yè)面,然后發(fā)送回瀏覽器。這種頁(yè)面處理方式被稱(chēng)為“動(dòng)態(tài)頁(yè)面”。

二、靜態(tài)頁(yè)面。

靜態(tài)頁(yè)面是指在服務(wù)器端確實(shí)存在的僅含HTML以及JS,CSS等客戶端運(yùn)行腳本的頁(yè)面。它的處理方式是。由客戶端提出請(qǐng)求,請(qǐng)求某一頁(yè)面 - --- > WEB服務(wù)器確認(rèn)并載入某一頁(yè)面 ----> WEB服務(wù)器將該頁(yè)面以包的形式傳遞回瀏覽器。由這一過(guò)程,我們對(duì)比一下動(dòng)態(tài)頁(yè)面,即可方現(xiàn)。動(dòng)態(tài)頁(yè)面需由Web服務(wù)器的PHP解析器進(jìn)行解析,而且通常還需連接數(shù)據(jù)庫(kù),進(jìn)行數(shù)據(jù)庫(kù)存取操作,然后才能形成HTML語(yǔ)言信息包;而靜態(tài)頁(yè)面,無(wú)須解析,無(wú)須連接數(shù)據(jù)庫(kù),直接發(fā)送,可大大減輕服務(wù)器壓力,提高服務(wù)器負(fù)載能力,大幅提供頁(yè)面打開(kāi)速度和網(wǎng)站整體打開(kāi)速度。但其缺點(diǎn)是,不能動(dòng)態(tài)地對(duì)請(qǐng)求進(jìn)行處理,服務(wù)器上必須確實(shí)存在該文件。

三、模板及模板解析。

模板即尚未填充內(nèi)容html文件。例如:

temp.html

Code:

以下是引用片段:

this is a { file } file''''s templets

PHP處理:

以下是引用片段:

templetest.php

Code:

$title = "HP愛(ài)好者測(cè)試模板";

$file = "TwoMax Inter test templet,

author:Sheyi";

$fp = fopen ("temp.html","r");

$content = fread ($fp,filesize ("temp.html"));

$content .= str_replace ("{ file }",$file,$content);

$content .= str_replace ("{ title }",$title,$content);

echo $content;

?>

模板解析處理,即將經(jīng)PHP腳本解析處理后得出的結(jié)果填充(content)進(jìn)模板的處理過(guò)程。通常借助于模板類(lèi)。目前較流行的模板解析類(lèi)有 phplib,smarty,fastsmarty等等。模板解析處理的原理通常為替換。也有些程序員習(xí)慣將判斷,循環(huán)等處理放進(jìn)模板文件中,用解析類(lèi)處理,典型應(yīng)用為block概念,簡(jiǎn)單來(lái)說(shuō)即為一個(gè)循環(huán)處理。由PHP腳本指定循環(huán)次數(shù),如何循環(huán)代入等,再由模板解析類(lèi)具體實(shí)施這些操作。

好了,對(duì)比過(guò)靜態(tài)頁(yè)面與動(dòng)態(tài)頁(yè)面各自的優(yōu)劣,現(xiàn)在我們就來(lái)說(shuō)說(shuō),如何用PHP生成靜態(tài)文件。

PHP生成靜態(tài)頁(yè)面并不是指PHP的動(dòng)態(tài)解析,輸出HTML頁(yè)面,而是指用PHP創(chuàng)建HTML頁(yè)面。同時(shí)因?yàn)镠TML的不可寫(xiě)性,我們創(chuàng)建的 HTML 若有修改,則需刪掉重新生成即可。(當(dāng)然你也可以選擇用正則進(jìn)行修改,但個(gè)人認(rèn)為那樣做倒不如刪掉重新生成來(lái)得快捷,有些得不償失。)

言歸正傳。用過(guò)PHP文件操作函數(shù)的PHP FANS知道,PHP中有一個(gè)文件操作函數(shù)fopen,即打開(kāi)文件。若文件不存在,則嘗試創(chuàng)建。這即是PHP可以用來(lái)創(chuàng)建HTML文件的理論基礎(chǔ)。只要用來(lái)存放HTML文件的文件夾有寫(xiě)權(quán)限(即權(quán)限定義0777),即可創(chuàng)建文件。(針對(duì)UNIX系統(tǒng)而言,Win系統(tǒng)無(wú)須考慮。)仍以上例為例,若我們修改最后一句,并指定在test目錄下生成一個(gè)名為test.html的靜態(tài)文件:

Code:

以下是引用片段:

$title = "拓邁國(guó)際測(cè)試模板";

$file = "TwoMax Inter test templet,

author:_Max">Matrix@Two_Max";

$fp = fopen ("temp.html","r");

$content = fread ($fp,filesize ("temp.html"));

$content .= str_replace ("{ file }",$file,$content);

$content .= str_replace ("{ title }",$title,$content);

// echo $content;

$filename = "test/test.html";

$handle = fopen ($filename,"w"); //打開(kāi)文件指針,創(chuàng)建文件

/*

檢查文件是否被創(chuàng)建且可寫(xiě)

*/

if (!is_writable ($filename)){

die ("文件:".$filename."不可寫(xiě),請(qǐng)檢查其屬性后重試!");

}

if (!fwrite ($handle,$content)){ //將信息寫(xiě)入文件

die ("生成文件".$filename."失敗!");

}

fclose ($handle); //關(guān)閉指針

die ("創(chuàng)建文件".$filename."成功!");

?>

實(shí)際應(yīng)用中常見(jiàn)問(wèn)題解決方案參考:

一、文章列表問(wèn)題:

在數(shù)據(jù)庫(kù)中創(chuàng)建字段,記錄文件名,每生成一個(gè)文件,將自動(dòng)生成的文件名存入數(shù)據(jù)庫(kù),對(duì)于推薦文章,只需指向存放靜態(tài)文件的指定文件夾中的該頁(yè)面即可。利用PHP操作處理文章列表,存為字符串,生成頁(yè)面時(shí)替換此字符串即可。如,在頁(yè)面中放置文章列表的表格加入標(biāo)記{ articletable },而在PHP處理文件中:

Code:

以下是引用片段:

$title = "拓邁國(guó)際測(cè)試模板";

$file = "TwoMax Inter test templet,

author:_Max">Matrix@Two_Max";

$fp = fopen ("temp.html","r");

$content = fread ($fp,filesize ("temp.html"));

$content .= str_replace ("{ file }",$file,$content);

$content .= str_replace ("{ title }",$title,$content);

// 生成列表開(kāi)始

$list = '''''''';

$sql = "select id,title,filename from article";

$query = mysql_query ($sql);

while ($result = mysql_fetch_array ($query)){

$list .= ''''''''.$result[''''title''''].''''

'''';

}

$content .= str_replace ("{ articletable }",$list,$content);

//生成列表結(jié)束

// echo $content;

$filename = "test/test.html";

$handle = fopen ($filename,"w"); //打開(kāi)文件指針,創(chuàng)建文件

/*

檢查文件是否被創(chuàng)建且可寫(xiě)

*/

if (!is_writable ($filename)){

die ("文件:".$filename."不可寫(xiě),請(qǐng)檢查其屬性后重試!");

}

if (!fwrite ($handle,$content)){ //將信息寫(xiě)入文件

die ("生成文件".$filename."失敗!");

}

fclose ($handle); //關(guān)閉指針

die ("創(chuàng)建文件".$filename."成功!");

?>

二、分頁(yè)問(wèn)題。

如我們指定分頁(yè)時(shí),每頁(yè)20篇。某子頻道列表內(nèi)文章經(jīng)數(shù)據(jù)庫(kù)查詢?yōu)?5條,則,首先我們通過(guò)查詢得到如下參數(shù):1,總頁(yè)數(shù);2,每頁(yè)篇數(shù)。第二步, for ($i = 0; $i < allpages; $i++),頁(yè)面元素獲取,分析,文章生成,都在此循環(huán)中執(zhí)行。不同的是,die ("創(chuàng)建文件".$filename."成功!";這句去掉,放到循環(huán)后的顯示,因?yàn)樵撜Z(yǔ)句將中止程序執(zhí)行。例:

Code:

以下是引用片段:

$fp = fopen ("temp.html","r");

$content = fread ($fp,filesize ("temp.html"));

$onepage = ''''20'''';

$sql = "select id from article where channel=''''$channelid''''";

$query = mysql_query ($sql);

$num = mysql_num_rows ($query);

$allpages = ceil ($num / $onepage);

for ($i = 0;$i<$allpages; $i++){

if ($i == 0){

$indexpath = "index.html";

} else {

$indexpath = "index_".$i."html";

}

$start = $i * $onepage;

$list = '''''''';

$sql_for_page = "select name,filename,title from article where channel=''''$channelid'''' limit $start,$onepage";

$query_for_page = mysql_query ($sql_for_page);

while ($result = $query_for_page){

$list .= ''''''''.$title.''''

'''';

}

$content = str_replace ("{ articletable }",$list,$content);

if (is_file ($indexpath)){

@unlink ($indexpath); //若文件已存在,則刪除

}

$handle = fopen ($indexpath,"w"); //打開(kāi)文件指針,創(chuàng)建文件

/*

檢查文件是否被創(chuàng)建且可寫(xiě)

*/

if (!is_writable ($indexpath)){

echo "文件:".$indexpath."不可寫(xiě),請(qǐng)檢查其屬性后重試!"; //修改為echo

}

if (!fwrite ($handle,$content)){ //將信息寫(xiě)入文件

echo "生成文件".$indexpath."失敗!"; //修改為echo

}

fclose ($handle); //關(guān)閉指針

}

fclose ($fp);

die ("生成分頁(yè)文件完成,如生成不完全,請(qǐng)檢查文件權(quán)限系統(tǒng)后重新生成!");

?>

大致思路如此,其中如其它數(shù)據(jù)生成,數(shù)據(jù)輸入輸出檢查,分頁(yè)內(nèi)容指向等可酌情在頁(yè)面中加入。

在實(shí)際文章系統(tǒng)處理過(guò)程當(dāng)中,還有許多問(wèn)題有待考慮,與動(dòng)態(tài)頁(yè)面不同之處,需注意的地方還有很多。但大致思路即是如此,其它方面可舉一反三而得。

深圳北大青鳥(niǎo)嘉華校區(qū)

評(píng)論
安卓APP開(kāi)發(fā)培訓(xùn) 安卓開(kāi)發(fā)培訓(xùn) 第二職業(yè)技術(shù)學(xué)校 第三職業(yè)技術(shù)學(xué)校 軟件自學(xué)網(wǎng) 學(xué)軟件開(kāi)發(fā) 深圳軟件開(kāi)發(fā) 計(jì)算機(jī)學(xué)校 計(jì)算機(jī)應(yīng)用技術(shù)課程 北大青學(xué)校 安卓培訓(xùn)多少錢(qián) 安卓學(xué)習(xí)培訓(xùn) 深圳測(cè)試工程師 深圳嘉華學(xué)校怎么樣 深圳SEO教程 深圳百度競(jìng)價(jià)培訓(xùn) 深圳電子商務(wù)學(xué)校 深圳淘寶培訓(xùn) 深圳android 電學(xué) 網(wǎng)店培訓(xùn)班 電商培訓(xùn) 電子商務(wù)培訓(xùn)班 電子商務(wù)培訓(xùn)網(wǎng) 開(kāi)網(wǎng)店培訓(xùn) 電商運(yùn)營(yíng)培訓(xùn) 電子商務(wù)學(xué)校 深圳電商培訓(xùn)班 深圳電商培訓(xùn)機(jī)構(gòu) 深圳百度競(jìng)價(jià)教程 網(wǎng)絡(luò)推廣培訓(xùn) 網(wǎng)絡(luò)推廣的方法 廣州專(zhuān)門(mén)java培訓(xùn) 廣州正規(guī)java培訓(xùn)中心 java語(yǔ)言培訓(xùn) it培訓(xùn)機(jī)構(gòu)排行榜 見(jiàn)面會(huì) 想學(xué)點(diǎn)技術(shù)學(xué)什么好 高中學(xué)歷學(xué)技術(shù) 軟件工程主要學(xué)什么 計(jì)算機(jī)課程 深圳網(wǎng)絡(luò)運(yùn)維工程師 起點(diǎn) 深圳職業(yè)培訓(xùn)學(xué)校 普工轉(zhuǎn)行學(xué)什么好呢
好吊妞免费视频在线观看,久久亚洲国产人成综合网,久久精品国产2020,欧美精品综合在线
亚洲一级淫片免费在线观看 | 天天看片国产精品 | 在线观看免费的AV片 | 亚洲福利国产精品合集在线看 | 亚洲性爱免费视频在线 | 日本一道久高清免费的视频 |