程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> php生成靜態頁面程序與原理分析

php生成靜態頁面程序與原理分析

編輯:關於PHP編程

生成靜態頁面是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
 $dsn = "mysql:host=localhost;dbname=test;";
 $user = "root";
 $password = "";
 try{
  $dbh = new PDO($dsn,$user,$password);
 }catch(PDOException $e){
  echo "連接失敗".$e->getMessage();
 }
?>

3.顯示新聞列表(news.php),注意,其連接為靜態html連接,這時還沒生成,當然鏈接打不開:

 

 代碼如下 復制代碼 <meta http-equiv="content-type" content="text/html;charset=utf-8" />
<a href="add.php">添加文章</a>
<hr>
<?php
 require_once "conn.php";
 $sql = "select * from news";
 foreach($dbh->query($sql) as $row){
  echo "<a href='news_{$row['id']}.html'>{$row['title']}</a>----<a href='add.php?id={$row['id']}'>修改文章</a><br>";
 }
?>

4.添加修改文章頁面:

 

 代碼如下 復制代碼 <meta http-equiv="content-type" content="text/html;charset=utf-8" />
<?php
 //獲取修改的內容
 if($_GET['id']){
  require_once "conn.php";
  $sql = "select * from news where id={$_GET['id']}";
  $res = $dbh->query($sql)->fetch();
 }
?>
<form action="action.php" method="post">
 標題:<input type="text" name="title" value="<?=@$res['title']?>"/><br/>
 內容:<textarea name="content" col=40 row=4><?=@$res['content']?></textarea><br/>
 <input type="hidden" name="id" value="<?=$_GET['id']?>" />
 <input type="submit" name="submit" value="<?php echo $_GET['id'] ? '修改' : '添加'?>" />
</form>

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生成靜態頁面的系統就完成了。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved