生成靜態頁面是php中來減少服務器負載與seo網站優化一個不錯的選擇,所以php生成靜態頁面功能是幾乎所有php程序員必須了解並掌握的一個知識點,下面我來給大家介紹php生成靜態頁面原理分析吧,有需要了解的朋友可進入參考。
生成html原理分析
我們把要生成的標簽寫成一個模板文件,然後再利用php讀取把指定標簽替換成我們要替換 內容就可以了,現在主流的dedecms系統也是這麼做的
生成靜態頁面代碼。
模板即尚未填充內容html文件。例如:
temp.html
<HTML>
<TITLE>{ title }</TITLE>
<BODY>
this is a { file } fileArray;s templets
</BODY>
</HTML>
templetest.php
<?php
$title = "拓邁國際測試模板";
$file = "TwoMax Inter test templet,<br>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生成靜態頁面的功能就實現了,但實現應用中這個不實用的,下面我介紹一個從數據庫到生成實例。
1.創建測試數據庫test,建立user表如下(自己插入幾條測試數據庫):
代碼如下 復制代碼
CREATE TABLE IF NOT EXISTS `news` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`title` varchar(128) DEFAULT NULL,
`content` text,
`time` int(10) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=12 ;
2.建立連接數據文件conn.php
代碼如下 復制代碼 <?php
3.顯示新聞列表(news.php),注意,其連接為靜態html連接,這時還沒生成,當然鏈接打不開:
代碼如下 復制代碼 <meta http-equiv="content-type" content="text/html;charset=utf-8" />
4.添加修改文章頁面:
代碼如下 復制代碼 <meta http-equiv="content-type" content="text/html;charset=utf-8" />
5.用於生成靜態文件的頁面模板template.html
代碼如下 復制代碼
<html>
<head>
<title>{title}</title>
<meta http-equiv="content-type"content="text/html; charset=UTF-8"/>
</head>
<body>
{title}發表於{time}
<hr>
{content}
</body>
</html>
6.action.php當然是用來生成和更新靜態文件的:
代碼如下 復制代碼
<?php
//表單處理操作
header("content-type:text/html;charset=utf-8");
require_once 'conn.php';
$title = $_POST['title'];
$content = $_POST['content'];
$time = time();
if($_POST['submit']=='添加'){
$sql = "insert into news values('','$title','$content',$time)";
$dbh->query($sql);
$id = $dbh->lastInsertId();
$filename = "news_{$id}.html";
$fp_tmp = fopen("template.html","r");
$fp_html = fopen($filename,"w");
while(!feof($fp_tmp)){
$row = fgets($fp_tmp);
$row = replace($row,$title,$content,date('Y-m-d H:i:s',$time));
fwrite($fp_html,$row);
}
fclose($fp_tmp);
fclose($fp_html);
echo "添加成功並生成靜態文件";
}else{
$sql = "update news set title = $title , content = $content ,time = $time where id ={$_POST['id']}";
$dbh->query($sql);
$filename = "news_{$_POST['id']}.html";
@unlink($filename);
$fp_tmp = fopen("template.html","r");
$fp_html = fopen($filename,"w");
while(!feof($fp_tmp)){
$row = fgets($fp_tmp);
$row = replace($row,$title,$content,date('Y-m-d H:i:s',$time));
fwrite($fp_html,$row);
}
fclose($fp_tmp);
fclose($fp_html);
echo "更新成功並更新靜態文件";
}
//逐行替換函數
function replace($row,$title,$content,$time){
$row=str_replace("{title}",$title,$row);
$row=str_replace("{content}",$content,$row);
$row=str_replace("{time}",$time,$row);
return $row;
}
?>
這樣一個完整生php生成靜態頁面的系統就完成了。