方法简单说明如下:
1.使用文件函数得到静态页面的模板字符串,然后用str_replace函数将需要替换的东西替换了再写入到新的文件中。
2. 利用PHP的输出控制函数(Output Control)得到静态页面字符串,再写入到新的文件中。
1 |
$filemodel="template/it.php"; #模板地址 |
2 |
$file=fopen($filemodel,"rb"); #打开模板,得到文件指针 |
3 |
$temp=fread($file,filesize($filemodel)); #得到模板文件html代码 |
方法一:ob_get_contents()
这是一种很方便的方法,也是很常用的方法,实现原理是:首先打开缓存,然后创建相应的静态页文件,写入缓存的内容,清空缓存。
示例:
2 |
$fn=date('ymdhis').rand(1000,9999).'html'; |
3 |
require("supply.php");#载入要生成静态页的文件,因为后台有ob_clen()所以在不会显示出来 |
4 |
$fs=fopen($fn,'w');#打开静态页文件 |
5 |
fwrite($fs,ob_get_contents());#生成静态文件 |
方法二:file_get_contents();
1 |
$fn=date('ymdhis').rand(1000,9999).'html'; |
2 |
$url= 'http://'.$_SERVER['HTTP_HOST']."/";#注意 |
3 |
$content=file_get_contents($url); |
下面对上面的注意进行一下解释,如果在些你使用的是仅仅是文件名,而不是URL那么您这个文件中如果有使用引用文件比如require (‘header.php’); 那么header.php中的内容将会显示不出来。
方法三:str_replace()
1 |
$filemodel="supply.php"; 字串5$file=fopen($filemodel,"w+"); |
2 |
$temp=fread($file,filesize($filemodel)); |
3 |
$temp=str_replace("[title]",$title,$temp); |
4 |
$temp=str_replace("[postTime]",$postTime,$temp); |
5 |
$temp=str_replace("[content]",$content,$temp); |
该方法适用于很简单的页面,如果supply.php中有使用引用文件比如require (‘header.php’);那么header.php中的内容将会显示不出来
在实际应用中,您可以写一个生成静态页的类,
18 |
var $message1="Error 1: You write class Shtml is Wrong ! The second parameter is 1 or 2 in this class!."; |
19 |
var $message2="Error 2: The file write Error."; |
21 |
function __construct ($Url,$FileBag,$FolderRoot,$FolderName,$fileid) |
24 |
$this->FileBag = $FileBag; |
25 |
$this->FileRoot = $FolderRoot; |
26 |
$this->FileName = $FolderName; |
27 |
$this->fileid = $fileid; |
32 |
public function loadcontent ($Folder) |
35 |
require_once $this->Url; |
36 |
Shtml::writehtml ($Folder,ob_get_contents()); |
41 |
public function useFolder () |
45 |
$Folder=$this->FileName; |
47 |
else if($this->FileBag==2) |
49 |
$Folder=date('Ymd',time()); |
53 |
exit($this->message1); |
55 |
if(!is_dir($this->FileRoot.$Folder)){ mkdir($this->FileRoot.$Folder,0700);} |
57 |
Shtml::loadcontent ($Folder); |
61 |
public function writehtml ($Folder,$cache_value) |
63 |
$file = fopen($this->FileRoot.$Folder.'/'.$this->fileid.'.html','w+'); |
64 |
fwrite($file,$cache_value); |