PHP靜態(tài)頁面教程(模板及模板解析)(組圖)
2021-08-19
1、server會依據(jù)文件的后綴名去進行解析,假設(shè)是HTML文件則server不會進行語法解析。而是直接輸出到瀏覽器。
2、假設(shè)一個頁面中所有都是HTML代碼而沒有須要解析的PHP語法,則沒有必要保存為PHP文件,這樣反而會減少執(zhí)行效率。
3、假設(shè)是須要PHP控制HTML代碼的輸出,比方須要PHP推斷用戶是否登陸,假設(shè)登陸則輸出A,未登錄則輸出B。這就須要PHP來進行控制了。HTML不能實現(xiàn)這種功能
PHP生成靜態(tài)頁面教程,一些主要概念
一,PHP 腳本和動態(tài)頁面。
PHP 腳本是一個結(jié)束腳本程序,可以通過嵌入等方式與 HTML 文件混合。也可以歸類。功能包裝等形式。以模板的形式處理用戶請求。
無論如何,它的基本原理是這樣的。通過發(fā)出請求,請求某個頁面----->引入指定的對應(yīng)腳本進行處理----->腳本被加載----->腳本被指定的PHP解析器解析形成HTML語言形式- --->解析后的HTML語句以包的形式發(fā)回瀏覽器。
不難看出,頁面發(fā)送到瀏覽器后,PHP 就不復(fù)存在了。已轉(zhuǎn)換并解析為 HTML 語句。客戶端請求是一個動態(tài)文件。事實上php代碼怎么放到html,那里不存在真正的文件。由PHP解析形成相應(yīng)的頁面,然后發(fā)送回瀏覽器。
這種頁面處理方式稱為“動態(tài)頁面”。
兩個。靜態(tài)頁面。
靜態(tài)頁面是指只包含最后確實存在的HTML、JS、CSS等執(zhí)行腳本的頁面。
它的處理方式是。按要求。請求頁面 ----> 確認(rèn)并加載頁面 ----> 將頁面以包的形式傳回瀏覽器。
從這個過程,我們來對比一下動態(tài)頁面。你現(xiàn)在可以。動態(tài)頁面需要通過PHP解析器進行解析,通常需要連接數(shù)據(jù)庫進行數(shù)據(jù)庫訪問操作。然后就可以形成HTML語言信息包。靜態(tài)頁面不需要解析或連接數(shù)據(jù)庫直接發(fā)送,可以大大降低壓力,提高負(fù)載能力。顯著提供頁面打開速度和網(wǎng)站整體打開速度。但它的缺點是不能動態(tài)處理請求,而且文件必須實際存在于其上。
三個。模板和模板分析。模板尚未填充內(nèi)容 html 文件。例如:
temp.html
代碼:
{ title } this is a { file } file's templets PHP處理: templetest.php Code: $title = "拓邁國際測試模板"; $file = "TwoMax Inter test templet, author: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; ?>
模板解析處理是將PHP腳本解析處理后得到的結(jié)果填充()到模板中的過程。通常在模板類的幫助下。目前比較流行的模板解析類是。還有很多。模板分析處理的原則通常是替換。一些程序員習(xí)慣于將推理、循環(huán)和其他處理放入模板文件中。使用解析類來處理,典型的應(yīng)用是一個概念,簡單來說就是一個循環(huán)處理。
PHP 腳本指定循環(huán)次數(shù)、如何循環(huán)替換等,然后模板解析類詳細實現(xiàn)這些操作。
好吧,我已經(jīng)比較了靜態(tài)和動態(tài)頁面的優(yōu)缺點?,F(xiàn)在讓我們談?wù)勊?。如何用PHP生成靜態(tài)文件。
PHP 生成靜態(tài)頁面,不代表 PHP 的動態(tài)分析和 HTML 頁面的輸出。它是指用 PHP 創(chuàng)建 HTML 頁面。
同時,由于HTML的不可寫性,如果我們創(chuàng)建的HTML發(fā)生變化,我們需要將其刪除并重新生成。 (當(dāng)然你也可以選擇使用正則進行修改,但個人覺得還是刪掉重新生成比較好。有些得不償失。)
回到正題。用過PHP文件操作函數(shù)的PHP愛好者都知道。 PHP 中有一個文件操作函數(shù)。文件被打開。如果文件不存在,請嘗試創(chuàng)建。
這是PHP可以用來創(chuàng)建HTML文件的理論基礎(chǔ)。只有用來存放HTML文件的文件夾才有寫權(quán)限(即權(quán)限定義0777)??梢詣?chuàng)建文件。(對于UNIX系統(tǒng),Win系統(tǒng)不需要考慮。)以上面的例子為例,如果我們修改最后一句,指定在test文件夾下生成一個名為test.html的靜態(tài)文件:
代碼:
php $title = "拓邁國際測試模板"; $file = "TwoMax Inter test templet, author: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"); //打開文件指針。創(chuàng)建文件 /* 檢查文件是否被創(chuàng)建且可寫 */ if (!is_writable ($filename)){ die ("文件:".$filename."不可寫。請檢查其屬性后重試。"); } if (!fwrite ($handle,$content)){ //將信息寫入文件 die ("生成文件".$filename."失??!"); } fclose ($handle); //關(guān)閉指針 die ("創(chuàng)建文件".$filename."成功!
"); ?>
實際應(yīng)用中常見問題解決方法參考: 1.文章列表問題:在數(shù)據(jù)庫中創(chuàng)建一個字段。記錄文件名,每次生成文件時將自己自動生成的文件名存入數(shù)據(jù)庫。對于推薦文章,只需指向指定靜態(tài)文件存放目錄下的頁面即可。使用PHP操作處理文章列表,保存為字符串,生成頁面時替換此字符串。
例如在頁面上放置文章列表的表格中添加標(biāo)簽{},在PHP處理文件中:
代碼:
"); } if (!fwrite ($handle,$content)){ //將信息寫入文件 die ("生成文件".$filename."失敗!"); } fclose ($handle); //關(guān)閉指針 die ("創(chuàng)建文件".$filename."成功。"); ?>
其次,分頁問題。例如,當(dāng)我們指定分頁時,每頁有 20 篇文章。某個子頻道的列表中的文章數(shù)已經(jīng)被數(shù)據(jù)庫查詢到了45。但是。首先我們通過查詢得到如下參數(shù): 1.總頁數(shù); 2、每頁文章數(shù)。
第二步,for ($i = 0; $i
";把這句話去掉php代碼怎么放到html,放在循環(huán)后的顯示器上,因為這句話會停止程序運行。例:
代碼:
$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"); //打開文件指針。創(chuàng)建文件 /* 檢查文件是否被創(chuàng)建且可寫 */ if (!is_writable ($indexpath)){ echo "文件:".$indexpath."不可寫,請檢查其屬性后重試!
"; //改動為echo } if (!fwrite ($handle,$content)){ //將信息寫入文件 echo "生成文件".$indexpath."失敗!"; //改動為echo } fclose ($handle); //關(guān)閉指針 } fclose ($fp); die ("生成分頁文件完畢。如生成不全然,請檢查文件權(quán)限系統(tǒng)后又一次生成!
"); ?
>
總體思路是這樣的。其中,其他數(shù)據(jù)生成、數(shù)據(jù)輸入輸出檢查、頁面內(nèi)容指向等可酌情添加到頁面中。
在實際文章系統(tǒng)處理過程中。還有很多問題需要考慮。與動態(tài)頁面不同,還有很多需要注意的地方。
但總體思路是一樣的。其他方面可以相互推論。
使用PHP制作靜態(tài)網(wǎng)站模板框架
模板可以改善網(wǎng)站的結(jié)構(gòu)。
本文解釋了如何在 PHP 4 中傳遞一個新的特性和模板類。在一個由大量靜態(tài) HTML 頁面組成的站點中,您可以巧妙地使用模板來控制頁面布局。
大綱:
==================================
獨立的功能和布局
避免重復(fù)的頁面元素
靜態(tài)網(wǎng)站的模板框架
==================================
單獨的功能和布局首先我們來看一下應(yīng)用模板的兩個主要目的:
分離功能(PHP)和布局(HTML)以避免頁面元素重復(fù)
第一個目的是談?wù)撟疃嗟哪康?。它設(shè)想了這樣一種情況,一群程序員編寫PHP腳本來生成頁面內(nèi)容,同時還有一群設(shè)計者設(shè)計HTML和圖形來控制頁面。外部的。功能和布局分離的基本思路是讓這兩組人能夠編寫和使用一組獨立的文件:程序員只需要關(guān)心那些只包含PHP代碼的文件,不需要關(guān)心頁面外觀
。并且頁面設(shè)計者可以使用他們最熟悉的可視化編輯器來設(shè)計頁面布局。無需擔(dān)心破壞頁面中嵌入的任何 PHP 代碼。
假設(shè)你之前看過一些關(guān)于PHP模板的教程,那么你應(yīng)該已經(jīng)明確了模板的工作機制??紤]一個簡單的頁面部分:頁面頂部是頁眉。左邊是導(dǎo)航欄,其余是內(nèi)容區(qū)。這樣的站點可以有如下模板文件:
模板演示樣例
{HEADER} | |
{LEFTNAV} | {CONTENT} |
福
條形
您可以看到頁面是如何從這些模板構(gòu)建的:主模板控制整個頁面的布局。模板和模板控制頁面的公共元素?;ɡㄌ枴皗}”內(nèi)的標(biāo)識符是內(nèi)容占位符。使用模板最基本的好處是界面設(shè)計者可以根據(jù)自己的意愿編輯這些文件,比如設(shè)置字體、改變顏色和圖形,或者完全改變頁面的布局。
界面設(shè)計師可以使用任何普通的 HTML 編輯器或可視化工具編輯這些頁面。因為這些文件只包含 HTML 代碼。無論什么 PHP 代碼。
所有的 PHP 代碼都保存在一個單獨的文件中。這個文件就是頁面 URL 實際調(diào)用的文件。文件由PHP引擎解析,結(jié)果返回給瀏覽器。
一般。 PHP 代碼始終動態(tài)生成頁面內(nèi)容,例如查詢數(shù)據(jù)庫或運行某些計算。下面是一個例子:
define( array( 'main' => 'main.htm', 'header' => 'header.htm', 'leftnav' => 'leftnav.htm' ) ); // 此處的PHP代碼設(shè)置$content使其包括合適的頁面內(nèi)容 $tpl->assign('CONTENT', $content); $tpl->parse('HEADER', 'header'); $tpl->parse('LEFTNAV', 'leftnav'); $tpl->parse('MAIN', 'main'); $tpl->FastPrint('MAIN'); ?>
這里我們使用流行的模板類。但是對于許多其他模板類,基本思想是相同的。
首先實例化一個類,告訴它在哪里可以找到模板文件以及哪個模板文件對應(yīng)于頁面的哪個部分。下一步是生成頁面內(nèi)容。將結(jié)果分配給內(nèi)容的標(biāo)識符;然后,依次解析每個模板文件,模板類將執(zhí)行必要的替換操作。最后將分析結(jié)果輸出到瀏覽器。
該文件完全由 PHP 代碼組成。不包含任何 HTML 代碼。這是它最大的優(yōu)勢。
如今,PHP 程序員可以專注于編寫生成頁面內(nèi)容的代碼。您不必?fù)?dān)心如何生成 HTML 以正確設(shè)置最終頁面的格式。
您可以使用此方法和上述文件來構(gòu)建一個完整的站點。假設(shè) PHP 代碼根據(jù) URL 中的查詢字符串生成頁面內(nèi)容。例如。您可以相應(yīng)地構(gòu)建一個完整的雜志站點。
很容易看出使用模板還有第二個優(yōu)勢。
如上例所示。頁面左側(cè)的導(dǎo)航欄單獨保存為文件。我們只需要編輯這個模板文件就可以改變網(wǎng)站所有頁面左側(cè)的導(dǎo)航欄。
避免重復(fù)的頁面元素
“這真是太好了”,您可能會想,“我的網(wǎng)站主要由大量靜態(tài)頁面組成。
現(xiàn)在我可以從所有頁面中刪除他們的公共部分。更新這些公共部分太麻煩了。
將來,我將能夠使用模板來創(chuàng)建非常易于維護的統(tǒng)一頁面布局。 “但事情并沒有那么簡單?!贝罅快o態(tài)頁面說明問題。
請考慮上面的例子。這個示例實際上只有一個 .php 頁面。之所以能生成整個站點的所有頁面,是因為它利用URL中的查詢字符串,從數(shù)據(jù)庫等信息源動態(tài)構(gòu)建頁面。
我們大多數(shù)人運行的網(wǎng)站不一定有數(shù)據(jù)庫支持。
我們的網(wǎng)站大部分都是由靜態(tài)頁面組成的,然后我們使用PHP在這里和那里添加了一些動態(tài)功能,例如搜索引擎、反饋表單等。
那么,如何在這樣的網(wǎng)站上應(yīng)用模板?
最簡單的方法是為每個頁面復(fù)制一個PHP文件,
然后將表示 PHP 代碼中內(nèi)容的變量設(shè)置為每個頁面中相應(yīng)的頁面內(nèi)容。
比如有三個頁面,分別是首頁(home)、關(guān)于()和產(chǎn)品()。我們可以從三個文件中分別生成它們。這三個文件的內(nèi)容都類似于:
define( array( 'main' => 'main.htm', 'header' => 'header.htm', 'leftnav' => 'leftnav.htm' ) ); $content = "歡迎訪問
希望你可以喜歡本站點
"; $tpl->assign('CONTENT', $content); $tpl->parse('HEADER', 'header'); $tpl->parse('LEFTNAV', 'leftnav'); $tpl->parse('MAIN', 'main'); $tpl->FastPrint('MAIN'); ?>
顯然。這種方式存在三個問題:我們要復(fù)制這些復(fù)雜的PHP代碼,涉及每個頁面的模板,這使得頁面像重復(fù)的公共頁面元素一樣難以維護;現(xiàn)在這些文件與 HTML 和 PHP 代碼混合在一起。給內(nèi)容變量賦值會變得非常困難,因為我們要處理大量的特殊字符。
解決問題的關(guān)鍵是將PHP代碼和HTML內(nèi)容分開,雖然我們無法從文件中刪除所有HTML內(nèi)容。但它可以刪除大部分 PHP 代碼。
靜態(tài)網(wǎng)站模板框架
首先,我們像之前一樣為頁面的所有常用元素和頁面的整體布局編寫模板文件;然后刪除所有頁面的公共部分,只留下頁面內(nèi)容。接下來,向每個頁面添加三行 PHP 代碼,如下所示:
php require('prepend.php'); ?>你好
歡迎訪問
希望你可以喜歡本站點
?>
這種方法基本上克服了上面提到的各種問題。今天文件中只有三行PHP代碼,沒有一行代碼直接引用模板。因此,修改這些代碼的可能性極小。另外,因為 HTML 內(nèi)容在 PHP 標(biāo)簽之外。因此,不存在處理特殊字符的問題。我們可以輕松地將這三行 PHP 代碼添加到所有靜態(tài) HTML 頁面中。
該函數(shù)引入了一個 PHP 文件。此文件包含與模板相關(guān)的所有必要 PHP 代碼。
該函數(shù)設(shè)置模板對象和頁面標(biāo)題。該函數(shù)解析模板并生成結(jié)果并發(fā)送給瀏覽器。
這是如何實現(xiàn)的?為什么在調(diào)用函數(shù)之前文件中的HTML沒有發(fā)送到瀏覽器?答案在于 PHP 4 的一個新特性,它同意將輸出到瀏覽器的內(nèi)容攔截到緩沖區(qū)中。
我們來看看.php的詳細代碼:
define( array( 'main' => 'main.htm', 'header' => 'header.htm', 'leftnav'=> 'leftnav.htm' ) ); $tpl->assign('TITLE', $title); ob_start(); } function pageFinish() { GLOBAL $tpl; $content = ob_get_contents(); ob_end_clean(); $tpl->assign('CONTENT', $content); $tpl->parse('HEADER', 'header'); $tpl->parse('LEFTNAV', 'leftnav'); $tpl->parse('MAIN', 'main'); $tpl->FastPrint('MAIN'); } ?>
該函數(shù)首先創(chuàng)建并設(shè)置一個模板實例。然后啟用輸出緩存。
在那之后。頁面本身的所有 HTML 內(nèi)容都將進入緩存。該函數(shù)獲取緩存中的內(nèi)容。然后在模板對象中指定這些內(nèi)容。最后解析模板并輸出完成的頁面。
這就是整個模板框架的全部工作過程。
先寫一個模板,包含網(wǎng)站每個頁面的公共元素,然后把所有頁面的公共頁面布局代碼全部刪除,替換成三行永遠不需要修改的PHP代碼;然后添加類文件和 .php 以包含 Path,這樣您就可以得到一個可以集中控制頁面布局的站點。它具有更好的可靠性和可維護性。并且站點級別的大規(guī)模修改變得非常容易。
本文下載包包含
一個可執(zhí)行的演示站點,它的代碼凝視比以前的代碼凝視更具體。該類可以在。最新版本是1.1.0,還有一個小補丁用來保證這個類在PHP 4中正確執(zhí)行。本文下載代碼中的類已經(jīng)被這個補丁修正了。
PHP輕松生成靜態(tài)頁面
NEWS
標(biāo)題 | 公布時間 |
">= $re["title"]? > |
= $re["datetime"]?> |
加入新聞 |
>
用PHP生成靜態(tài)網(wǎng)頁的兩個函數(shù)
近年來。萬維網(wǎng)(也稱為萬維網(wǎng)。WWW)正在不斷地改變著信息處理技術(shù)的面貌。網(wǎng)絡(luò)已成為高速的有效介質(zhì)。并且適合人與企業(yè)之間的交流與協(xié)作。幾乎所有的信息技術(shù)領(lǐng)域都普遍受到WEB的影響。 Web 訪問帶來了許多其他用戶和許多其他數(shù)據(jù)。這意味著數(shù)據(jù)庫面臨很多其他壓力,最終用戶的響應(yīng)速度越來越慢。與不斷增加 CPU、磁盤驅(qū)動器和內(nèi)存以跟上這種增長的需求相比,靜態(tài)網(wǎng)頁應(yīng)該更有用。更經(jīng)濟的選擇。
靜態(tài)WEB動態(tài)網(wǎng)頁用PHP的詳細實現(xiàn)功能見()
function gen_static_file($program, $filename) { $program 1= "/usr/local/apache/htdocs/php/" . $program; $filename1 = "/usr/local/apache/htdocs/ static_html/" . $filename; $cmd_str = "/usr/local/php4/bin/php " . $program1 . " } " . $filename1 . " "; system($cmd_str); echo $filename . " generated.〈br〉"; }
這個函數(shù)是實現(xiàn)靜態(tài)的關(guān)鍵,即PHP動態(tài)頁面程序不是發(fā)送到瀏覽器,而是輸入到名為$的文件中(如2)所示。
這兩個參數(shù)中,$是PHP動態(tài)頁面程序,$是生成的靜態(tài)頁面的名稱(可以根據(jù)自己的需要制定自己的命名規(guī)則,這個很重要,見下文),/usr/ /php4/bin/php 是PHP中具有將程序輸入文件功能的部分。它是一個在 PHP 中運行外部命令的函數(shù)。我們還可以看到,所有生成動態(tài)頁面的php程序都需要放在/php/文件夾中,所有新生成的靜態(tài)頁面都會出現(xiàn)在//文件夾中(這些路徑可以根據(jù)具體需求設(shè)置)。
讓我們在下面給出一個詳細的例子??纯挫o態(tài)的.php頁面是如何生成的。
function gen_college_static () { for ($i = 0; $i 〈= 32; $i++〉 { putenv("province_id=" . $i); //*.php文件從數(shù)據(jù)庫取數(shù)據(jù)時要用到。 $filename = " college_static". $i . ".html"; gen_static_file("college_static.php", $filename); }
從這個函數(shù)可以看出,通過調(diào)用函數(shù)(),.php是靜態(tài)的。變成了33個靜態(tài)頁面..html~..html,其中$會隨著$I的變化而變化。當(dāng)然,也可以直接從數(shù)據(jù)庫中取值。為了控制生成的靜態(tài)頁面的數(shù)量和名稱,其他程序?qū)ι傻撵o態(tài)頁面的調(diào)用應(yīng)與靜態(tài)頁面的命名規(guī)則保持一致。