php动态页如何生成静态页三种方法

发布时间:2020-04-13编辑:脚本学堂
有关PHP动态页生成静态页的多种方法,包括模板替换方法,str_replace进行替换的方法,以及file_get_contents生成静态页面的方法,感兴趣的朋友参考下。

php动态页如何生成静态页三种方法

php编程中,生成静态页,简单来讲就是定义好模板与模板标题,之后利用str_replace进行替换了。

另一种方法,就是用ob_get_contents输出内容,然后生成html。

还可以使用file_get_contents直接执行访问远程文件然后进行保存,性能极差。

说明:
1、使用文件函数得到静态页面的模板字符串,然后用str_replace函数将需要替换的东西替换了再写入到新的文件中。
2、利用PHP的输出控制函数(Output Control)得到静态页面字符串,再写入到新的文件中。

例子:
 

复制代码 代码示例:
$filemodel="template/it.php"; //模板地址
$file=fopen($filemodel,"rb"); //打开模板,得到文件指针
$temp=fread($file,filesize($filemodel)); //得到模板文件html代码

方法1,ob_get_contents()

原理:首先打开缓存,然后创建相应的静态页文件,写入缓存的内容,清空缓存。

例子:
 

复制代码 代码示例:
ob_strart();//打开缓冲区
$fn=date('ymdhis').rand(1000,9999).'html';//生成文件名
require("supply.php");//载入要生成静态页的文件,因为后台有ob_clean()所以在不会显示出来
$fs=fopen($fn,'w');//打开静态页文件
fwrite($fs,ob_get_contents());//生成静态文件
ob_clean();//清空缓存

方法2,file_get_contents();

例子:
 

复制代码 代码示例:
$fn=date('ymdhis').rand(1000,9999).'html';
$url= 'http://'.$_SERVER['HTTP_HOST']."/";//注意
$content=file_get_contents($url);
$fs=fopen($fn,'w');
fwrite($fs,$content);

如果使用仅仅是文件名,而不是URL,此文件中如果有使用引用文件比如require ('header.php'); 那么header.php中的内容将会显示不出来。

方法3,str_replace()

例子:
 

复制代码 代码示例:
$filemodel="supply.php"; 字串5$file=fopen($filemodel,"w+");
$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中的内容将会显示不出来

一个生成静态页的类,例子:
 

复制代码 代码示例:
/*+++
|
| 使用方法
|   $shtml = new Shtml($Url,$FileBag,$FolderName,$fileid)
|   $Url:       页面 URL 地址
|   $FileBag:   文件夹标记   1 为:指定文件夹 
|         2 为:默认文件夹(时间(年月日))
|        $FolderRoot html文件存放路径
|   $FolderName 指定文件夹的名称 $FileBag为2时 可以写为空("");
|   $fileid      静态页面名称(后缀 默认为 .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 ();
}
/*************获取数据*******************/
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);
}
/********** 生成静态页面*****************/
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.jb200.com",1,"","cc",$fileid);

以上生成html程序代码没有生成分页了,如果文章很多它也只生成一篇文章,大家可以扩展以上代码。