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

PHP生成靜態頁面函數

編輯:PHP綜合
t1.php

<?php
// 方法一根據模版生成靜態頁面
// replaceTemplateString函數用於替換模板中指定字符串
function replaceTemplateString($templateString) {
// 用來替換的變量
$title = "文章標題";
$body = "這裡是文章主體";
// 替換模板中指定字符串
$showString = str_replace ( "%title%", $title, $templateString );
$showString = str_replace ( "%body%", $body, $showString );
// 返回替換後的結果
return $showString;
}


$template_file = "template.html";
$new_file = "new.html";
// 模版文件指針
$template_juBing = fopen ( $template_file, "r" );
// 要生成的文件指針
$newFile_juBing = fopen ( $new_file, "w" );

// 方式一獲取整體模板內容字符串,替換後賦給新文件
$templateString = fread ( $template_juBing, filesize ( $template_file ) );
$showString = replaceTemplateString ( $templateString ); // 替換模板中字符串
fwrite ( $newFile_juBing, $showString ); // 將替換後的內容寫入生成的HTML文件

/*
// 方式二循環讀取模版每行內容字符串,替換後依次添加到新文件
while ( ! feof ( $template_juBing ) ) { // feof() 函數檢測是否已到達文件末尾。如果文件指針到了末尾或者出錯時則返回 TRUE。否則返回FALSE(包括 socket 超時和其它情況)。
$templateString = fgets ( $template_juBing ); // fgets(file,length) 從文件指針中讀取一行並返回長度最多為 length - 1 字節長度的字符串,包括換行符。如果沒有指定 length,則默認為 1K,或者說 1024 字節。
$showString = replaceTemplateString ( $templateString );
fwrite ( $newFile_juBing, $showString ); // 第一次往打開的指針文件中寫入內容時會替換指針文件中原有內容,在該文件指針關閉前,fwrite函數再添加內容會在已添加內容之後
}
*/
// 關閉文件指針
fclose ( $newFile_juBing );
fclose ( $template_juBing );



/*
數據庫與靜態頁的關系
通常數據庫內添加一條信息同後,生成一個該信息的靜態頁面,所以最好在數據庫表中添加一字段存儲對應靜態頁面的路徑文件名,方便以後的修改,刪除

模版的替換
一般來說,如果需要修改靜態HTML頁面的模版,通常的做法是將所有的已經生成的HTML頁面刪除,然後重新創建新的HTML頁面。(或者說全部重新覆蓋生成)

靜態頁上的動態操作
有些時候,在創建的靜態HTML頁上面也需要進行一些動態操作。例如,新聞系統中的每篇新聞要統計點擊率。
可通過一個寬和高都為0像素的圖像控件來隱藏的調用一個php頁面來實現頁面計數器功能,如
<img width='0' height='0' src='counter.php?fileid=S001'>

鏈接目錄的靜態頁
通常對於使用靜態頁面的系統來說,往往將連接列表的目錄頁也生成靜態HTML文件供訪問者浏覽
注意的是因為每增加或者減少一條數據庫信息都會對鏈接列表產生影響,因此,每次對數據庫信息進行添加和刪除時都需要更新鏈接目錄的靜態頁。
分頁的設計可以通過創建多個鏈接目錄的靜態頁來完成。
*/


// 方法二根據緩沖區生成
ob_start (); // 當緩沖區激活時,並且有ob_end_clean()的情況下,所有輸出打印的非文件頭信息均不會輸出打印到頁面,而是保存在內部緩沖區。如果沒有ob_end_clean(),則信息既被存在內部緩沖區,也被輸出打印
?>
this is test Output Control
<?php
echo "<br>this is test Output Control<br>";
include_once 'cache/newFile.php';

$contents = ob_get_contents (); // 獲取緩沖區到此為止存儲的信息,緩沖區只保存會向頁面浏覽器輸出打印的內容,php執行代碼等不會保存
// $contents = ob_get_clean(); // 獲取緩沖區到此為止存儲的信息,並關閉清除緩沖區

// ob_end_flush();//輸出打印緩沖區到此為止存儲的信息,並關閉清除緩沖區

ob_end_clean (); // 關閉清除緩沖區的內容

file_put_contents ( $new_file, $contents );// 向文件寫入內容


//===============決定什麼時候更新緩存:
/*
根據程序的需要,緩存可以采取多種形式。最常見的3種方式是:

時間觸發緩存(過期的時間戳)
內容改變觸發緩存(發現數據改變後,相應地更新緩存)
人工觸發緩存(人工的方式告知系統信息超期並且強制產生新的緩存)

緩存需求可能是以上原理的一個或多個的綜合。這裡事例時間觸發方式。然而,在一個全面的緩存機制中,3種方式的綜合將被使用。
*/
//假設有 "new.html" 靜態頁,第一行包含時間戳的字符串為 <!-- Cache Created at: 1368855939 -->
$new_file = "new.html";
$check_begin_str = "<!-- Cache Created at: ";
$check_end_str = " -->";

$template_juBing = fopen ( $new_file, "r" );
$templateString = fgets ( $template_juBing ); // 獲取第一行數據

$templateString=str_replace($check_begin_str,"",$templateString);
$templateString=str_replace($check_end_str,"",$templateString);
$templateString=str_replace(" ","",$templateString); // 獲取第一行最終時間戳
if((time()-$templateString)<60) {
//當前時間戳減去頁面生成時間戳,小於指定的60,則不生成
}
else {
//重新生成靜態頁
}
?>

template.html

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>%title%</title>
</head>
<body>
<H1>%title%</H1>
<hr>
<pre>%body%</pre>
</body>
</html>
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved