PHP頁面靜態化處理

第一步:用戶通過瀏覽器輸入網址或單擊鏈接發出HTTP請求,請求特定的PHP網頁。
第二步:Web服務器收到請求,獲取該PHP文件,並把它傳到PHP引擎。
第三步:PHP引擎對該文件進行解析,文件中若有連接與查詢數據庫的命令,PHP引擎就會打開通向數據庫的連接,發送查詢指令。
第四步:數據庫接受查詢和處理,並把結果返回給PHP引擎。
第五步:PHP完成腳本運行,以HTML格式傳回給Web 服務器。
第六步:最後通過HTTP返回請求的PHP網頁,此時爲HTML文檔形式,通過瀏覽器解釋該文檔顯示在用戶的顯示器上。
現在我們來看一下PHP靜態化的任務是什麼,也就說PHP靜態化指的是什麼:
首先需要明瞭的是,PHP靜態化工作是在後臺執行的,用戶需要的目標PHP網頁其實是已經早已完成PHP引擎執行腳本完畢後存儲在Web Server裏的HTML靜態網頁。也許你會說:爲什麼不直接編寫HTML靜態網頁呢?如果你不打算使用數據庫,那確實沒有什麼必要;但你需要使用數據庫存儲大量數據的時候,你就必須需要PHP才能與數據庫交互了。
PHP靜態化的作用何在?我的看法有下面幾點:
(1)因爲已經存儲在Web Server裏,用戶請求特定的頁面時,上圖顯示的工作流程將省去了第2345步,明顯的可以大大加快網頁打開速度;
(2)由於靜態網頁不會受到SQL注入,網站會更安全;
(3)靜態網頁更有利於搜索引擎的收錄與抓取;
(4)不用調用數據庫,服務器端的CPU調用大大減少,增加服務器的性能;
(5)綜合地發揮了動態技術與靜態技術各自的優點。
PHP靜態化的實現:
第一種方法:僞靜態化,是html格式不過會傳遞參數,適合一些獨立頁面;
第二種方法:緩存方式,靜態化是服務器做的,實際是個動態的請求,服務器爲了可以緩存動態的結果,將鏈接做了靜態化,每次點擊鏈接時服務器接受對應的 參數在緩存中查找,如果沒有按照對應關係請求後臺並將其加入緩存;
第三種方法:藉助模板來完成靜態化,這種方法適合大批文件的轉化,諸如一個新聞發佈系統,只需要先設計一個模板,再將模板中對應的字符串用數據庫中讀取的內容替換即可,最後利用fso將數據寫入html文件 .
我們以第三種方法來實現PHP的靜態化:
這個例子模擬商品信息系統進行。
首先創建用於指定要進行靜態化數據信息的文件:static.html:
<form method="post" action="info.php">
商品名稱:<input type="text" name="name" size="20">
商品信息:<textarea name="info" cols=10 rows="25"></textarea>
<input type="submit" name="提交">
</form>
接着創建一個模板文件:info.html:
<html>
<body>
商品名稱:{name}
商品信息:{info}
</body>
</html>
再創建一個靜態化用PHP文件:info.php:
<?php
require_once("conn.php"); //引入連接數據庫文件
$name=$_POST["name"];
$info=$_POST["info"]; //獲得表單變量
$countfile="count.txt";
if(!file_exists($countfile))
{
fopen($countfile,"w"); //如果此文件不存在,則自動建立一個
}
$fp=fopen($countfile,"r");
$num=fgets($fp,20);
$num=$num+1; //每次其值自動加一
fclose($fp);
$fp=fopen($countfile,"w");
fwrite($fp,$num); //更新其值
fclose($fp);
$houzui=".html";
$path=$num.$houzui;
$sql="insert into info (id,name,info,path) values ('','".$title."'.'".$content$path."')";
$query=mysql_query($sql);
$fp=fopen("info.html","r"); //只讀打開模板
$str=fread($fp,filesize("info.html"));//讀取模板中內容
$str=str_replace("{name}",$name,$str);
$str=str_replace("{info}",$info,$str);//替換內容
fclose($fp);
if(!file_exists($path)){
$handle=fopen($path,"w"); //寫入方式打開新聞路徑
}
fwrite($handle,$str); //把剛纔替換的內容寫進生成的HTML文件
fclose($handle);
?>
例子說明:
(1)這個例子的關鍵就在於用函數str_replace()替換模板文件的內容,並且生成新的的網頁;
(2)實際操作中,模板文件還可以加入大量的美化優化;
(3)這個例子生成的靜態網頁取名是以連續的數字命名,你可以進行任意更改
(4)靜態化具體操作不難掌握,關鍵在於掌握它的理念,非常明瞭什麼時候可以採用靜態技術。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章