PHP頁面的靜態化很有必要,尤其是在CMS系統中,一些內容一旦生成,基本上不會有變化,這時如果用html將頁面靜態化,無疑會減少服務其解析PHP頁面的負擔。以下是看書學來的PHP靜態化技術,記錄之以備不時之需。
無論是利用框架還是簡單的腳本,原理基本一致:就是利用PHP進行文件操作,替換html模板中的動態元素。
簡單的例子:
1.建立模板(template.html)
<html>
<head>
<title>一篇文章</title>
</head>
<body>
<div id = "headline">%headline%</div>
<div id = "content">%content%</div>
</body>
</html>
模板很簡單,要填充的有2條數據分別是文章題目(%headline%)、文章內容(%content%),這些東西就是所謂的動態元素。
2.靜態化腳本(toStatic.php)
<?php
//Replace函數用於將從模版文件中讀取的內容中的關鍵字替換成變量中的內容
function Replace($row, $headline = '', $content = '')
{
//替換參數中的關鍵字
$row = str_replace("%headline%", $headline, $row);
$row = str_replace("%content%", $content, $row);
//返回替換後的結果
return $row;
}
//主程序
$connection = mysql_connect("localhost", "username", "password") or die(mysql_error());
$database = mysql_select_db($connection, "dbname") or die(mysql_error());
//新添加的文章信息
$headline = $_POST['headline'];
$content = $_POST['content'];
//生成文件名,這裏用日期時間
$filename = 'S'.date("YmdHis").'.html';
//執行SQL語句
$sql = "insert into news values('$headline', '$content', '$filename')";
$res = mysql_query($sql);
//根據SQL執行語句返回的bool型變量判斷是否插入成功
if($res)
{
//模版文件指針
$f_tem = fopen("template.html","r");
//生成的文件指針
$f_new = fopen($filename,"w");
//循環讀取模版文件,每次讀取一行
while(!feof($f_tem))
{
$row = fgets($f_tem);
//替換讀入內容中的關鍵字
$row = Replace($row, $headline, $content);
//將替換後的內容寫入生成的HTML文件
fwrite($f_new, $row);
}
//關閉文件指針
fclose($f_new);
fclose($f_tem);
//提示
echo "OK!";
}
else
echo "Failed!";
mysql_close();
?>
3.一般的CMS都會記錄內容被瀏覽的信息,例如瀏覽次數或者瀏覽者的IP信息等,靜態頁面要記錄這些信息,可以在模板中加入一個長寬都爲0的圖片,指向計數腳本。
以記錄瀏覽次數爲例:
<img '0' height='0' src='counter.php?fileID=S001' />
這樣,計數操作可以放到counter.php中進行,又不會破壞網頁的靜態性。