PHP动态页生成静态页的3种常用方法
作者:shichen2014 时间:2024-05-09 09:02:21
生成静态页的页面非常的简单就是定义好模板与模板标题,之后利用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("https://www.aspxhome.com",1,"","cc",$fileid);
总结, 这个生成html程序代码没有生成分页了,如果文章很多它也只生成一篇文章,如果要改进我们需要进行比较大的改动了,在此就不介绍了。感兴趣的朋友可以动手测试改进一下,相信会有不小的收获!
希望本文所述对大家的PHP程序设计有所帮助。
标签:PHP,生成,静态页
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
asp自带的内存缓存 application
2011-03-09 11:18:00
如何对Mysql 数据表压缩
2010-11-25 17:21:00
chatGPT本地部署、运行和接口调用的详细步骤
2023-08-31 03:46:31
![](https://img.aspxhome.com/file/2023/9/104959_0s.jpg)
浅析JS原始值和引用值问题
2024-04-28 09:33:17
python抓取网站的图片并下载到本地的方法
2022-05-19 23:45:08
基于MATLAB和Python实现MFCC特征参数提取
2023-01-29 07:37:53
![](https://img.aspxhome.com/file/2023/1/95731_0s.png)
PyQt 线程类 QThread使用详解
2021-09-18 05:51:37
浅谈python 四种数值类型(int,long,float,complex)
2023-12-17 05:26:48
ASP+AJAX做类似google的搜索提示
2008-10-24 13:49:00
教你两步解决conda安装pytorch时下载速度慢or超时的问题
2022-04-12 17:19:59
![](https://img.aspxhome.com/file/2023/5/110435_0s.png)
用python自动生成日历
2022-08-28 14:28:58
![](https://img.aspxhome.com/file/2023/4/72174_0s.png)
python-图片流传输的思路及示例(url转换二维码)
2021-06-18 14:48:44
如何用python获取到照片拍摄时的详细位置(附源码)
2023-04-22 05:04:18
![](https://img.aspxhome.com/file/2023/6/126996_0s.jpg)
python使用Faker进行随机数据生成
2023-12-21 14:24:33
![](https://img.aspxhome.com/file/2023/9/85129_0s.png)
Python操作使用MySQL数据库的实例代码
2024-01-16 09:26:12
PHP实现的杨辉三角求解算法分析
2023-11-19 13:52:29
![](https://img.aspxhome.com/file/2023/9/55679_0s.jpg)
Python中面向对象你应该知道的一下知识
2022-01-31 11:35:47
go 对象池化组件 bytebufferpool使用详解
2024-02-10 14:26:11
如何使用Index Server建立一个网站导航地图?
2010-06-05 12:39:00
深入浅析Python 中 is 语法带来的误解
2021-08-23 14:18:17