|
本帖最后由 超新星 于 2023-5-15 04:35 编辑
生成静态页的页面非常的简单就是定义好模板与模板标题,之后利用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代码
- 方法一: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();//清空缓存
- 方法二: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中的内容将会显示不出来。
- 方法三: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("//www.yinxi.net",1,"","cc",$fileid);
复制代码
|
|