我們先回顧一些基本的概念。
一,PHP腳本與動態頁。
PHP腳本是一種伺服器端腳本程序,可透過嵌入等方法與HTML檔案混合,也可以類,函數封裝等形式,以範本的方式對使用者請求進行處理。無論以何種方式,它的基本原理是這樣的。由客戶端提出請求,請求某一頁面-----> WEB伺服器引入指定對應腳本進行處理-----> 腳本被載入伺服器-----> 由伺服器指定的PHP解析器對腳本進行解析形成HTML語言形式----> 將解析後的HTML語句以包的方式傳回給瀏覽器。由此不難看出,在頁面傳送到瀏覽器後,PHP就不存在了,已轉換解析為HTML語句。客戶請求為一動態文件,事實上並沒有真正的文件存在在那裡,是PHP解析而成相對應的頁面,然後發送回瀏覽器。這種頁面處理方式稱為「動態頁面」。
二,靜態頁。
靜態頁面是指在伺服器端確實存在的僅含HTML以及JS,CSS等客戶端執行腳本的頁面。它的處理方式是。由客戶端提出請求,請求某一頁面 ----> WEB伺服器確認並載入某一頁面 ----> WEB伺服器將該頁面以包的形式傳回瀏覽器。由此過程,我們比較一下動態頁面,即可方現。動態頁面需由WEB伺服器的PHP解析器進行解析,而且通常還需連接資料庫,進行資料庫存取操作,然後才能形成HTML語言資訊包;而靜態頁面,無須解析,無須連接資料庫,直接傳送,可大大減輕伺服器壓力,提高伺服器負載能力,大幅提供頁面開啟速度和網站整體開啟速度。但其缺點是,不能動態地對請求進行處理,伺服器上必須確實存在該文件。
三,模板及模板解析。
範本即尚未填入內容html檔案。例如:
temp.html
{ title } PHP處理:
templetest.php
$title = "拓邁國際測試範本"; author:Matrix@Two_Max";
$fp = fopen ("temp.html","r");
);
$content .= str_replace ("{ file }",$file,$content);
$content .= str_replace ("{ title }",$content .= str_replace ("{ title }",$content .= str_replace ("{ title }",$title,$htitle,$; $content;
?>
模板解析處理,即將經PHP腳本解析處理後得出的結果填入(content)進模板的處理過程。通常藉助於模板類別。目前較流行的模板解析類別有phplib,smarty,fastsmarty等等。模板解析處理的原理通常為替換。也有些程式設計師習慣將判斷,循環等處理放進模板檔案中,用解析類別處理,典型應用為block概念,簡單來說即為一個循環處理。由PHP腳本指定循環次數,如何循環代入等,再由範本解析類別具體實作這些操作。
好了,對比過靜態頁面與動態頁面各自的優劣,現在我們就來說說,如何用PHP產生靜態檔案。
PHP產生靜態頁面並不是指PHP的動態解析,輸出HTML頁面,而是指用PHP建立HTML頁面。同時因為HTML的不可寫性,我們所建立的HTML若有修改,則需刪掉重新產生即可。 (當然你也可以選擇用正則進行修改,但個人認為那樣做倒不如刪掉重新生成來得快捷,有些得不償失。)
言歸正傳。用過PHP檔案運算函數的PHP FANS知道,PHP中有一個檔案運算函數fopen,也就是開啟檔案。若文件不存在,則嘗試建立。這即是PHP可以用來建立HTML檔案的理論基礎。只要用來存放HTML檔案的資料夾有寫入權限(即權限定義0777),即可建立檔案。 (針對UNIX系統而言,Win系統無須考慮。)仍以上例為例,若我們修改最後一句,並指定在test目錄下產生一個名為test.html的靜態檔案:
$title = "拓邁國際測試模板";
$file = "TwoMax Inter test templet,
author:Matrix@Two_Max";
$fp ($ fp,filesize ("temp.html"));
$content .= str_replace ("{ file }",$file,$content);
title,$content);
// echo $content;
$filename = "test/test.html";
handle ,建立檔案
/*
檢查檔案是否已建立且可寫入
*/
if (!is_writable ($filename)){ (!is_writable ($filename)){ (!is_writable ($filename)){ 「不可寫,請檢查其屬性後重試!");
}
if (!fwrite ($handle,$content)){ //將資訊寫入檔案
".$filename."失敗! ?>
實際應用中常見問題解決方案參考:
一,文章列表問題:
在資料庫中建立字段,記錄檔名,每產生一個文件,將自動產生的文件名稱存入資料庫,對於推薦文章,只需指向存放靜態文件的指定資料夾中的該頁面即可。利用PHP操作處理文章列表,存為字串,生成頁面時替換此字串即可。如,在頁面中放置文章清單的表格加入標記{ articletable },而在PHP處理文件中:
$title = "拓邁國際測試模板";
$file "拓邁國際測試模板";
$file "拓邁國際測試模板";
$file "拓邁國際測試模板";
$file TwoMax Inter test templet,
author:Matrix@Two_Max";
$fp = fopen ("temp.html html"));
$content .= str_replace ("{ file }",$file,$content);
$content .= str_replace ("{ title }",$content,$content); 🎜> // 產生清單開始
$list = '';
$sql = "select id,title,filename from ( $result = mysql_fetch_array ($query)){
$list .= '
'.$res '';
}
$content .= str_replace ("{ articletable }",$list,$content);
//產生清單結束
$content;
$filename = "test/test.html";
$handle = fopen ($filename,"w"); //開啟檔案指標,建立檔案
文件是否已建立且可寫入
*/
if (!is_writable ($filename)){
die ("檔案:".$filename."不可寫,請檢查其屬性後再試! ");
}
if (!fwrite ($handle,$content)){ //將資訊寫入檔案
die file("產生檔案".$filename."失敗! ");
}
fclose ($handle); //關閉指標
die ("建立檔案".$filename."成功!");
?> ("建立檔案".$filename."成功!");
?>
二,分頁問題。每頁篇數。 ".$filename."成功! ";這句去掉,放到循環後的顯示,因為語句將中止程式執行。例如:
$fp = fopen ("temp.html","r");
$content > $onepage = '20';
$sql = 「以文章選擇id,其中頻道='$channelid'"; = mysql_num_rows ( $query);
$allpages = ceil ($num / $onepage);
for ($i = 0;$i $indexpath = "index.html";
} else {
}
$start = $i * $ onepage;
$list = '';
$sql_for_page =「從文章中選擇名稱、檔案名稱、標題,其中頻道='$channel_$ mysql_query ($sql_for_page);
while ($result = $query_for_page){
.$title.'
';
}
$content = str_replace (“{ articletable }”,$list,$content); {
@unlink ($indexpath); //若檔案已存在,刪除
}
🎜 > /*
檢查文件是否已且建立可寫入
*/
."不可寫,請檢查其屬性後重試! "; //修改為echo
}
if (!fwrite ($handle,$content)){ //將資訊寫入檔案寫入檔案編號$ "; //修改為echo
}
fclose ($handle); //關閉遊標
};未完全,請檢查文件權限系統後重新生成! ");
?>
大致思路如此,其中如其他數據生成,數據輸入輸出檢查,分頁內容指向頁面中加入等可考慮的情況。
在實際文章系統處理過程中涉及,還有問題有待考慮,與動態頁面不同的地點,需要注意的地方還有很多。
以上就介紹了http://www.56.com/m2v/?magic=1 PHP產生靜態頁面詳解,包括了http://www.56.com/m2v/?magic=1方面的內容,希望對PHP教程有興趣的朋友可以幫忙。