方法简单说明如下:
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()

这是一种很方便的方法,也是很常用的方法,实现原理是:首先打开缓存,然后创建相应的静态页文件,写入缓存的内容,清空缓存。

示例:

1 ob_strart();#打开缓冲区
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());#生成静态文件
6 ob_clean();#清空缓存

方法二:file_get_contents();

1 $fn=date('ymdhis').rand(1000,9999).'html';
2 $url= 'http://'.$_SERVER['HTTP_HOST']."/";#注意
3 $content=file_get_contents($url);
4 $fs=fopen($fn,'w');
5 fwrite($fs,$content);

下面对上面的注意进行一下解释,如果在些你使用的是仅仅是文件名,而不是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中的内容将会显示不出来

在实际应用中,您可以写一个生成静态页的类,

01 /*+++
02    |
03    | Author :陈毓端
04    | 使用方法
05    |   $shtml = new Shtml($Url,$FileBag,$FolderName,$fileid)
06    |   $Url:       页面 URL 地址
07    |   $FileBag:   文件夹标记   1 为:指定文件夹
08    |         2 为:默认文件夹(时间(年月日))
09    |        $FolderRoot html文件存放路径
10    |   $FolderName 指定文件夹的名称 $FileBag为2时 可以写为空("");
11    |   $fileid      静态页面名称(后缀 默认为 .html)
12    |
13    |
14    |
15 /*++*/
16     class Shtml
17     {
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.";
20  
21      function __construct ($Url,$FileBag,$FolderRoot,$FolderName,$fileid)
22      {
23     $this->Url   = $Url;
24     $this->FileBag   = $FileBag;
25     $this->FileRoot = $FolderRoot;
26     $this->FileName = $FolderName;
27     $this->fileid    = $fileid;
28     Shtml::useFolder ();
29    }
30  
31      /*************获取数据*******************/
32     public function loadcontent ($Folder)
33      {
34         ob_start();
35      require_once $this->Url;
36      Shtml::writehtml ($Folder,ob_get_contents());
37      ob_clean();
38         }
39  
40        /********** 指定文件夹*****************/
41      public function useFolder ()
42      {
43      if($this->FileBag==1)
44        {
45                 $Folder=$this->FileName;
46     }
47      else if($this->FileBag==2)
48        {
49          $Folder=date('Ymd',time());
50     }
51     else
52       {
53                 exit($this->message1);
54       }
55               if(!is_dir($this->FileRoot.$Folder)){ mkdir($this->FileRoot.$Folder,0700);}
56  
57       Shtml::loadcontent ($Folder);
58  
59      }
60      /********** 生成静态页面*****************/
61      public function writehtml ($Folder,$cache_value)
62      {
63          $file   = fopen($this->FileRoot.$Folder.'/'.$this->fileid.'.html','w+');
64       fwrite($file,$cache_value);
65       fclose($file);
66      }
67  
68     }
69  
70     $fileid=2;
71     $shtml = new Shtml("http://www.qq.com",1,"","cc",$fileid);