PHP動態(tài)頁生成靜態(tài)頁的3種常用方法
生成靜態(tài)頁的頁面非常的簡單就是定義好模板與模板標題,之后利用str_replace進行替換了,是最常用的方法,另一種是利用ob_get_contents輸出獲得然后生成html,還有一種不怎么推薦的是使用file_get_contents直接執(zhí)行訪問遠程文件然后進行保存,性能極差。
具體方法簡單說明如下:
1.使用文件函數(shù)得到靜態(tài)頁面的模板字符串,然后用str_replace函數(shù)將需要替換的東西替換了再寫入到新的文件中。
2. 利用PHP的輸出控制函數(shù)(Output Control)得到靜態(tài)頁面字符串,再寫入到新的文件中。
$file=fopen($filemodel,"rb"); //打開模板,得到文件指針
$temp=fread($file,filesize($filemodel)); //得到模板文件html代碼
方法一:ob_get_contents()
這是一種很方便的方法,也是很常用的方法,實現(xiàn)原理是:首先打開緩存,然后創(chuàng)建相應(yīng)的靜態(tài)頁文件,寫入緩存的內(nèi)容,清空緩存。
示例:
$fn=date('ymdhis').rand(1000,9999).'html';//生成文件名
require("supply.php");//載入要生成靜態(tài)頁的文件,因為后臺有ob_clean()所以在不會顯示出來
$fs=fopen($fn,'w');//打開靜態(tài)頁文件
fwrite($fs,ob_get_contents());//生成靜態(tài)文件
ob_clean();//清空緩存
方法二:file_get_contents();
$url= 'http://'.$_SERVER['HTTP_HOST']."/";//注意
$content=file_get_contents($url);
$fs=fopen($fn,'w');
fwrite($fs,$content);
下面對上面的注意進行一下解釋,如果在些你使用的是僅僅是文件名,而不是URL那么您這個文件中如果有使用引用文件比如require ('header.php'); 那么header.php中的內(nèi)容將會顯示不出來。
方法三:str_replace()
$temp=fread($file,filesize($filemodel));
$temp=str_replace("[title]",$title,$temp);
$temp=str_replace("[postTime]",$postTime,$temp);
$temp=str_replace("[content]",$content,$temp);
該方法適用于很簡單的頁面,如果supply.php中有使用引用文件比如require ('header.php');那么header.php中的內(nèi)容將會顯示不出來
在實際應(yīng)用中,您可以寫一個生成靜態(tài)頁的類,
|
| 使用方法
| $shtml = new Shtml($Url,$FileBag,$FolderName,$fileid)
| $Url: 頁面 URL 地址
| $FileBag: 文件夾標記 1 為:指定文件夾
| 2 為:默認文件夾(時間(年月日))
| $FolderRoot html文件存放路徑
| $FolderName 指定文件夾的名稱 $FileBag為2時 可以寫為空("");
| $fileid 靜態(tài)頁面名稱(后綴 默認為 .html)
|
|
|
/*++*/
class Shtml
{
var $message1="Error 1: You write class Shtml is Wrong ! The second parameter is 1 or 2 in this class!.";
var $message2="Error 2: The file write Error.";
function __construct ($Url,$FileBag,$FolderRoot,$FolderName,$fileid)
{
$this->Url = $Url;
$this->FileBag = $FileBag;
$this->FileRoot = $FolderRoot;
$this->FileName = $FolderName;
$this->fileid = $fileid;
Shtml::useFolder ();
}
/*************獲取數(shù)據(jù)*******************/
public function loadcontent ($Folder)
{
ob_start();
require_once $this->Url;
Shtml::writehtml ($Folder,ob_get_contents());
ob_clean();
}
/********** 指定文件夾*****************/
public function useFolder ()
{
if($this->FileBag==1)
{
$Folder=$this->FileName;
}
else if($this->FileBag==2)
{
$Folder=date('Ymd',time());
}
else
{
exit($this->message1);
}
if(!is_dir($this->FileRoot.$Folder)){ mkdir($this->FileRoot.$Folder,0700);}
Shtml::loadcontent ($Folder);
}
/********** 生成靜態(tài)頁面*****************/
public function writehtml ($Folder,$cache_value)
{
$file = fopen($this->FileRoot.$Folder.'/'.$this->fileid.'.html','w+');
fwrite($file,$cache_value);
fclose($file);
}
}
$fileid=2;
$shtml = new Shtml("http://www.dhdzp.com",1,"","cc",$fileid);
總結(jié), 這個生成html程序代碼沒有生成分頁了,如果文章很多它也只生成一篇文章,如果要改進我們需要進行比較大的改動了,在此就不介紹了。感興趣的朋友可以動手測試改進一下,相信會有不小的收獲!
希望本文所述對大家的PHP程序設(shè)計有所幫助。
相關(guān)文章
apache和php之間協(xié)同工作的配置經(jīng)驗分享
閑暇之時也會對PHP知識做一些研究與大家共享,首先工欲善其事,必先利其器,可能比喻不是很恰當,php也需要一系列的環(huán)境配置,以下是我配置php的一些手稿,經(jīng)測試已成功運行了2013-04-04
PHP遍歷某個目錄下的所有文件和子文件夾的實現(xiàn)代碼
本篇文章是對PHP遍歷某個目錄下的所有文件和子文件夾的實現(xiàn)代碼進行了詳細的分析介紹,需要的朋友參考下2013-06-06
php.ini中的request_order推薦設(shè)置
這篇文章主要介紹了php.ini中的request_order推薦設(shè)置,需要的朋友可以參考下2015-05-05
php中html_entity_decode實現(xiàn)HTML實體轉(zhuǎn)義
這篇文章主要介紹了php中html_entity_decode實現(xiàn)HTML實體轉(zhuǎn)義的相關(guān)資料,需要的朋友可以參考下2018-06-06

